我有一个查询,updated
table1 中的一行COUNT(*)
来自另一个表 -
UPDATE t1
SET a=(SELECT COUNT(b) FROM t2 WHERE c=10 GROUP BY c))
WHERE id=20
问题是如果 t2 中没有 c=10 的条目,则查询本身会失败,因为SELECT
返回null或什么也不返回。即使子选择语句返回null,有没有办法使这项工作?
PS我尝试过使用 IFNULL,但看起来这也不起作用。
我有一个查询,updated
table1 中的一行COUNT(*)
来自另一个表 -
UPDATE t1
SET a=(SELECT COUNT(b) FROM t2 WHERE c=10 GROUP BY c))
WHERE id=20
问题是如果 t2 中没有 c=10 的条目,则查询本身会失败,因为SELECT
返回null或什么也不返回。即使子选择语句返回null,有没有办法使这项工作?
PS我尝试过使用 IFNULL,但看起来这也不起作用。
通过 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
MySQL 的许多好奇心之一是,如果删除该GROUP BY
子句(如果在没有显式子句的情况下使用聚合函数,MySQL 将隐式分组所有行GROUP BY
),即使没有基础记录,它也将始终返回聚合结果;在COUNT()
函数的情况下,它根据需要返回 0 的结果:
UPDATE t1 SET a=(SELECT COUNT(*) FROM t2 WHERE c=10) WHERE id=20
在sqlfiddle上查看。