当count为null时,用table1中的count来更新table1

时间:2013-05-08 18:55:32

标签: mysql

我在另一个表格中有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,但看起来也不行。

3 个答案:

答案 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)

尝试使用 COALESCE

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

<强> Refernce