1、0、NULLを含むカラムがあるとします。あなただけの1と0でグループ化すると、結果セットにあなたの2つだけではなく3行を与え、0とNULLカウント:カラムのエイリアス(NULLでのGROUP BY)は、MySQLで不正な結果を返します
SELECT SUM(aTable.whatever),IFNULL(aNullableTable.NullableColumn,0) AS TRUEORFALSE FROM aTable LEFT JOIN aNullableTable ON aTable.ID = aNullableTable.ID GROUP BY IFNULL(aNullableTable.NullableColumn,0);
:これはと等価である必要があり、私の世界では
SELECT SUM(aTable.whatever),IFNULL(aNullableTable.NullableColumn,0) AS TRUEORFALSE FROM aTable LEFT JOIN aNullableTable ON aTable.ID = aNullableTable.ID GROUP BY TRUEORFALSE;
しかし、そうではありません。最初の例では、列にNULLがある場合は3行を返すことがあります。 2番目の例では、NULLを正しくグループ化しています。
ここで何かを誤解していますか、これはバグですか?
のようなものでIFNULLを交換した場合の挙動が類似していることに留意すべきである:
のMySQL 5.7.11編集上で観測
IF(NullableColumn IS NULL,0,1)
、IF(NullableColumn<1,0,1)
とIF(NullableColumn IS NOT NULL,1,0)
:おそらく、私はそれを追加する必要がありますこれは、NULL値が入っている別のテーブルにLEFT JOINするときです。私は例を編集しました。
編集:これは私が使用したためだったSELECT IFNULL(NullableColumn,0) AS NullableColumn GROUP BY NullableColumn;
これはいい考えではなく、将来の参考になるため、非常に混乱した結果になります。上記の例では、GROUP BYが実際に正しく機能しなかった場合、期待どおりに0、1、NULLの代わりに2、0、1の2つの行が得られます。愚かな私。
IFNULL()には2つのパラメータしかありません。3ではありません。 –
ああ、そうです。ごめんなさい。私はちょうどそれを修正します。明らかに、テストされたコードでは正しいです。 – nickdnk
http://sqlfiddle.com/#!9/c57094/2このデモでエラーを表示できますか? –