ホームページ >データベース >mysql チュートリアル >MySQL 5.6 は ANY_VALUE 関数と同等の機能を提供しますか?

MySQL 5.6 は ANY_VALUE 関数と同等の機能を提供しますか?

DDD
DDDオリジナル
2024-11-27 04:14:11961ブラウズ

Does MySQL 5.6 Offer an Equivalent to the ANY_VALUE Function?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。