GROUP BY: NULL 値の無視
データベース管理では、GROUP BY 関数は、特定の列の類似した値に基づいて行をグループ化するために機能します。または列。ただし、NULL 値は個別のグループとして扱われるため、NULL フィールドが検出された場合に意図しない結果が生じる可能性があります。
次のクエリを考えてみましょう。
SELECT `table1`.*, GROUP_CONCAT(id SEPARATOR ',') AS `children_ids` FROM `table1` WHERE (enabled = 1) GROUP BY `ancestor`
table1 に次の 5 つの行があると仮定します。 ancestor フィールドが NULL に設定されている場合、クエリは 1 行のみを返しますが、望ましい結果は 5 行すべてを取得することです。 rows.
この問題を解決するには、一意の識別子を導入して NULL 値を区別する戦略を採用できます。以下に例を示します。
SELECT `table1`.*, IFNULL(ancestor,UUID()) as unq_ancestor GROUP_CONCAT(id SEPARATOR ',') AS `children_ids` FROM `table1` WHERE (enabled = 1) GROUP BY unq_ancestor
この変更されたクエリでは、IFNULL() 関数を使用して、祖先列の NULL 値に UUID (Universally Unique Identifier) を割り当てます。これにより、行ごとに一意の識別子が作成され、NULL 値を効果的に区別し、グループ化できるようになります。これにより、先祖フィールドが NULL であるかどうかに関係なく、すべての行が結果セットに返されることが保証されます。
以上がMySQL の GROUP BY 句で NULL 値が予期しないグループを作成しないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。