MySQL ANY_VALUE での GROUP BY エラーの回避
MySQL データベースを使用する場合、特にバージョンでグループ化操作に関連するエラーが発生することがよくあります。 5.7より前。そのような問題の 1 つは、「SELECT リストの式 #1 が GROUP BY にありません」というエラーです。このエラーは、GROUP BY クエリで非集計カラムを取得しようとすると発生します。
MySQL 5.7 では、ANY_VALUE 関数により、非集計カラムから単一の任意の値を取得できるようになり、この問題に対する便利な解決策が提供されます。グループ内の集計列。ただし、この関数は、5.6 などの以前のバージョンの MySQL では使用できません。
回避策の 1 つは、ONLY_FULL_GROUP_BY SQL モードを一時的に無効にすることです。これにより、GROUP BY 操作に対してより厳しい要件が適用されます。これは、次のクエリを使用して実行できます:
SET SESSION sql_mode = '';
SQL モードを無効にした後、ANY_VALUE 関数を使用したクエリは MySQL 5.6 でエラーなしで実行されます。ただし、この回避策では、クエリ結果で非集計列が返される可能性があるため、予期しない結果が生じる可能性があることに注意することが重要です。
より信頼性の高い解決策は、明示的に集計するように SQL クエリ自体を変更することです。目的の列を選択するか、テーブルから特定の行を選択します。たとえば、クエリ例の画像テーブルに自動インクリメントされる ID 列がある場合、次のクエリは国ごとに 1 行を返し、予測可能な画像が表示されます:
SELECT c.id, c.name, i.* FROM countries c LEFT JOIN ( SELECT MIN(id) id, country_id FROM images GROUP BY country_id ) first ON c.id = first.country_id LEFT JOIN images i ON first.id = i.id
以上がMySQL での「SELECT リストの式 #1 が GROUP BY にありません」エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。