1

updatedtable1 の行をCOUNT(*)別のテーブルから取得するクエリがありました-

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

問題は、t2 に c=10のエントリがない場合、 nullSELECTを返すか何も返さないため、クエリ自体が失敗することです。sub-selectステートメントが null を返す場合でも、これを機能させる方法はありますか?

PS IFNULL を使用してみましたが、それも機能しないようです。

4

3 に答える 3

1

MySQL の多くの興味深い点の 1 つは、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 に答える