我在另一个表格中有updated
表1中的COUNT(*)
行{ - 1}} -
UPDATE t1
SET a=(SELECT COUNT(b) FROM t2 WHERE c=10 GROUP BY c))
WHERE id=20
问题是如果t2中有没有条目且c = 10,则查询本身会失败,因为SELECT
会返回 null 或什么也不会。即使子选择语句返回null,有没有办法使这个工作成功?
P.S。我尝试过使用IFNULL,但看起来也不行。
答案 0 :(得分:1)
通过IFNULL控制空值:
UPDATE t1 SET a=IFNULL (
( SELECT COUNT(b) FROM t2 WHERE c=10 GROUP BY c),0 )
WHERE id=20
或者如果第二个选择结果可能为空,则可以使用此选项:
UPDATE t1 SET a= if( exists( SELECT * FROM t2 WHERE c=10 GROUP BY c) ) ,(SELECT COUNT(b) FROM t2 WHERE c=10 GROUP BY c),0)
WHERE id=20
答案 1 :(得分:1)
MySQL的许多好奇之一是,如果删除GROUP BY
子句(如果在没有显式GROUP BY
子句的情况下使用聚合函数,MySQL将隐式地对所有行进行分组),它将会即使没有基础记录,也总是返回汇总结果;在COUNT()
函数的情况下,它根据需要返回0的结果:
UPDATE t1 SET a=(SELECT COUNT(*) FROM t2 WHERE c=10) WHERE id=20
在sqlfiddle上查看。
答案 2 :(得分:0)