1

我有一个查询,updatedtable1 中的一行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,但看起来这也不起作用。

4

3 回答 3

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   
于 2013-05-08T19:06:41.907 回答
1

MySQL 的许多好奇心之一是,如果删除该GROUP BY子句(如果在没有显式子句的情况下使用聚合函数,MySQL 将隐式分组所有行GROUP BY),即使没有基础记录,它也将始终返回聚合结果;在COUNT()函数的情况下,它根据需要返回 0 的结果:

UPDATE t1 SET a=(SELECT COUNT(*) FROM t2 WHERE c=10) WHERE id=20

sqlfiddle上查看。

于 2013-05-08T19:09:13.390 回答
0

尝试使用COALESCE

UPDATE t1
SET a=COALESCE((SELECT COUNT(b) FROM t2 WHERE c=10 GROUP BY c),0)
WHERE id=20

参考

于 2013-05-08T19:08:16.467 回答