簡體   English   中英

使用if條件基於子查詢更新表

[英]Update table based on subquery with if condition

我想實現以下目標:

update bill b set b.isPaid = (if(select count(*) from bill_payment p where p.bill_id = b.id) > 0,true,false);

但是我得到這個錯誤:

錯誤1064(42000):您的SQL語法有錯誤; 在第1行上,檢查與您的MySQL服務器版本相對應的手冊以獲取正確的語法,以在'res_bill_payment p中選擇count(*),其中p.bill_id = b.id)> 0,true,false)附近使用

如何在mySQL中執行此操作?

我建議使用EXISTS編寫此代碼:

UPDATE bill b
    SET b.isPaid = (EXISTS (SELECT 1
                            FROM bill_payment p
                            WHERE p.bill_id = b.id
                           ) 
                   );

EXISTS子句返回一個布爾值,因此無需顯式使用TRUEFALSE (除非您確實非常希望使用)。

我強烈建議為此目的使用EXISTS而不是COUNT(*) ,因為它通常具有更好的性能。 EXISTS可以在第一個匹配記錄處停止,而不必計算所有匹配記錄。

似乎您缺少一些括號:

UPDATE bill b 
SET b.isPaid = (IF(
                  (
                    SELECT COUNT(*) 
                    FROM bill_payment p 
                    WHERE p.bill_id = b.id
                  ) > 0
                  ,TRUE
                  ,FALSE
                ));
UPDATE bill b
SET b.isPaid = true
    WHERE
          (SELECT count(*)
           FROM bill_payment p
           WHERE p.bill_id = b.id) > 0;

會做到的

要么

UPDATE bill b
SET b.isPaid = 
          (SELECT count(*)
           FROM bill_payment p
           WHERE p.bill_id = b.id) > 0;

如果要更新每行。

您也可以使用UPDATE..JOIN..

UPDATE bill b
LEFT JOIN (SELECT bill_id FROM bill_payment GROUP BY bill_id) bp
 ON(bp.bill_id = b.id)
SET b.isPaid = if(bp.bill_id IS NULL , 1 , 0 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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