古い Web サイトを更新していますが、クエリの 1 つが機能しなくなりました。
SELECT * FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
ドロップした場合は機能することに気付きましたGROUP BY
が、結果セットは元のものと一致しません:
SELECT * FROM tbl WHERE col1 IS NULL ORDER BY col2
そこでGROUP BY
、ドキュメントを読んで何が問題なのかを確認しようとしましたが、すべてのフィールドを選択するのではなく、列名を明示的に使用することを提案しているように見えた*
ので、順序付けおよびグループ化されている列だけで試しました:
SELECT col2 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
これは機能しますが、コードを調べた後、クエリにはクエリに2つの列が必要なので、追加した人は誰でも*
やりすぎましたが、その列を追加するとエラーが発生し、同様に3番目の列を追加すると同じエラーが発生します:
SELECT col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
SELECT col1, col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
この最後のクエリが機能しない理由を誰か教えてもらえますか? docsから理由を解読することはできませんが、これは必要な結果セットを取得するために必要な最小限のクエリです。
管理者でクエリを実行すると、このエラーが発生します
Error in query (1055): Expression #2 of SELECT list is not in GROUP BY
clause and contains nonaggregated column 'name.table.column'
which is not functionally dependent on columns in GROUP BY clause; this is
incompatible with sql_mode=only_full_group_by