Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

286
Vistas
NodeJS Sqlite WHERE IN Query Stament con parámetro dinámico (?)

Uso parámetros dinámicos para mis declaraciones SQLITE en node. Por ejemplo SELECT * FROM table WHERE table.id = ? . Todo esto funciona bastante bien. Pero con una consulta WHERE IN siempre no obtengo resultados. Lo que indica que está malinterpretando el parámetro dinámico. Aquí está mi código:

 getModelsByBrandId: (ids_array) => {
 const ids = ids_array.toString();
 const sql = "SELECT * FROM models WHERE brand_id IN (?)";
 const params = [ids];

 return new Promise((resolve, reject) => { 
 db.all(sql, params, async (err, rows) => { 
 if (err) {
 reject(err);
 } else {
 resolve(rows)
 }
 });
 }); 
 }, 

Ya había intentado pasar la matriz pero también una cadena ( array.toString() ). Desafortunadamente, ninguno de estos arrojó ningún resultado.

Pregunta: ¿Qué estoy haciendo mal y qué debo hacer para que la consulta WHERE IN funcione?

¡Gracias por adelantado! máx.

almost 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

getModelsByBrandId: (ids_array) => {
 const placeholders = ids_array.map(() => '?').join(',');
 const params = ids_array;
 const sql = "SELECT * " 
 + "FROM models "
 + "WHERE brand_id IN (" + placeholders + ")";

 return new Promise((resolve, reject) => { 
 db.all(sql, params, async (err, rows) => { 
 if (err) {
 reject(err);
 } else {
 resolve(rows)
 }
 });
 }); 
}, 

Debería enviar una consulta como

 getModelsByBrandId([1, 2, 3]);
// sql = "SELECT * FROM models WHERE brand_id IN (?,?,?)"
// params = [1, 2, 3]

** EDITAR **

Necesitaba algo de la misma característica, donde estaba tratando con consultas sin procesar. Entonces, en lugar de escribir todo, y como ejercicio personal, escribí una función de plantilla que manejaba parámetros de SQL como estos.

 import { sql } from "./sql.template";

const brand_ids = [1, 2, 3];

const [ query, params ] = sql`
 SELECT *
 FROM models
 WHERE brand_id IN (${brand_ids})
`;

console.log({ query, params });
// { query:"SELECT * FROM models WHERE brand_id IN (?,?,?)", params:[1, 2, 3] }

Fuente disponible aquí .

almost 4 years ago · Santiago Trujillo Denunciar

0

¡Qué no debes hacer!

Es escribir la declaración sin "parámetro dinámico" como:

 const sql = "SELECT * FROM models WHERE brand_id IN (" + ids_array.toString() + ")";
const params = [];

¿Por qué? Vea los comentarios a continuación...

almost 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda