ホームページ >データベース >mysql チュートリアル >MySQL 5.6 は ANY_VALUE 関数と同等の機能を提供しますか?
MySQL 5.6 には ANY_VALUE 機能がありますか?
本番環境で MySQL 5.6 を使用し、開発環境で 5.7 を使用しているときに問題が発生しました。具体的には、GROUP BY 句を使用しているため、5.6 ではエラーが返されます。 5.7 では、ANY_VALUE 関数を使用して問題を解決しますが、この関数は MySQL 5.6 ではサポートされていません。
使用しているクエリは次のとおりです:
SELECT c.id, c.name, i.* FROM countries c, images i WHERE i.country_id = c.id GROUP BY c.id;
MySQL 5.6 では、GROUP に非集計カラムが指定されているため、エラーが発生します。 BY 句。解決策の 1 つは、テーブルからランダムな行を選択する ANY_VALUE 関数を使用することです。
SELECT c.id, c.name, ANY_VALUE(i.url) url, ANY_VALUE(i.lat) lat, ANY_VALUE(i.lng) lng FROM countries c, images i WHERE i.country_id = c.id GROUP BY c.id;
ただし、ANY_VALUE の使用は理想的ではありません。任意の値。より良い解決策は、最初の値などの特定の値を取得することです。
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 5.6 の ONLY_FULL_GROUP_BY モードを無効にして、元のクエリを実行できるようにすることもできますが、これは誤った結果につながる可能性があるため推奨されません。
以上がMySQL 5.6 は ANY_VALUE 関数と同等の機能を提供しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。