[英]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
子句返回一个布尔值,因此无需显式使用TRUE
和FALSE
(除非您确实非常希望使用)。
我强烈建议为此目的使用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.