我有一個多行node-postgres插入,給我的問題。這是一個參數化查詢,它使用公用表表達式來更新主表和兩個帶有外鍵的表。該查詢使用主表的參數,但是,當我嘗試對多行的外鍵表進行參數化時,會引發語法錯誤。
首先,我有這個函數接受一個數組並返回一串值。
const buildValues = (id, values) => {
return values
.map(val => "(" + id + ", '" + val + "', " + false + ")")
.join(", ");
};
這裏是我的查詢:
app.post('/api/saveperson', function (req, res) {
pg.connect(connectionString, (err, client, done) => {
const insertPerson = `
WITH x AS (INSERT INTO people (title, notes, name)
VALUES ($1, $2, $3)
RETURNING personId
),
b AS (
INSERT INTO sports (personid, name, favorite)
VALUES $4)
INSERT INTO instructions (personid, name, favorite)
VALUES $5;
`;
client.query(insertPerson,
[ req.body.title
, req.body.notes
, req.body.name
, queries.buildValues("SELECT personId FROM x", req.body.sports)
, queries.buildValues("SELECT personId FROM x", req.body.instructions)
]
)
.then(() => client.end())
.catch(err => console.log(err));
});
return res.json(req.body);
});
插入到體育的列數是3,但只有一個值($ 4),同樣的說明... –
有沒有更好的方式來處理這個問題?我覺得使用函數迭代(例如,$ 4,$ 5,$ 6 ...)兩個未知長度的數組可能會變得很難看。 – Matt
嘗試在上面的代碼中將client.query(insertRecipe)更改爲'client.query(insertPerson' –