我正在嘗試使用 typeorm 運行它
const fields = await queryRunner.query(
`SELECT "fieldId", "name" FROM "field" WHERE "name" IN ($1) `,
[...fieldNames]
);
其中 fieldNames 是一個串列。但我收到一個錯誤說 bind message supplies 5 parameters
有沒有辦法讓這個動態化,這樣我就可以傳遞一個串列并獲得回傳值?這不是 orm 型別獨有的——這是 postgres 的問題
uj5u.com熱心網友回復:
IN查詢的每個元素都是一個單獨的引數。如果要傳遞五個元素,則需要五個引數。
SELECT "fieldId", "name"
FROM "field"
WHERE "name" IN ($1,$2,$3,$4,$5)
這意味著動態生成 SQL 以匹配您擁有的值的數量。
Postgres 提供了更好的方法。使用any運算子。這適用于一個單一值的陣列。
SELECT "fieldId", "name"
FROM "field"
WHERE "name" = ANY($1)
現在您應該能夠將一組值作為您的第一個引數傳遞。Typeorm 應該將其轉換為Postgres Array。
const sql = `
select fieldId, name
from field
where name = ANY($1)
`
const values = [['manny','moe','jack']]
client.query(sql, values)
這應該導致:
select fieldId, name
from field
where name = ANY(ARRAY['manny','moe','jack'])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/353901.html
標籤:sql PostgreSQL 打字机
