[英]how to delete if not exists in postgresql
for (var i in req.body.categories) { db.query("DELETE FROM guide_categories WHERE NOT IN($1) AND guide_id = $1",[req.body.categories[i],req.params._id], function(err, data) { if (err) console.log(err); console.log('updated'); }) }
我試圖刪除數組中不存在的數組,並從郵遞員傳遞categories:["3","2","1"]
,如categories:["3","2","1"]
。 這個怎么做??
突出3個錯誤:
查詢中缺少IN
前面的列名( category
?),這使該語句成為非法語法。
您兩次使用相同的參數$1
。 第二個應該是$2
。
IN()
構造需要一個值列表或一個子查詢, 而不是數組。 傳遞數組時,請使用<> ALL()
代替。
此查詢應該工作:
DELETE FROM guide_categories
WHERE category <> ALL($1)
AND guide_id = $2;
不過要小心NULL值!
細節:
您的代碼中存在幾個問題:
不要在類別上使用循環。 這樣做,您將刪除所有內容(第一次刪除除類別3之外的所有內容,因此只剩下類別3,然后刪除除類別2之外的所有內容,因此您將刪除所有內容)。
您在NOT IN
之前缺少列名。
不要使用NOT IN
,而是使用<> ALL
,並傳遞整個數組
修復第二個$1
。
因此,可能應該遵循以下內容:
db.query("DELETE FROM guide_categories WHERE category_id <> ALL ($1) AND guide_id = $2",
[
req.body.categories,
req.params._id
],
function(err, data)
{
if (err) console.log(err);
console.log('updated');
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.