Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

288
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!