簡體   English   中英

如果PostgreSQL中不存在該如何刪除

[英]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個錯誤:

  1. 查詢中缺少IN前面的列名( category ?),這使該語句成為非法語法。

  2. 您兩次使用相同的參數$1 第二個應該是$2

  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM