ホームページ >データベース >mysql チュートリアル >MySQL 5.6 で同等の ANY_VALUE() 関数を使用するにはどうすればよいですか?

MySQL 5.6 で同等の ANY_VALUE() 関数を使用するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-28 18:37:11864ブラウズ

How Can I Use ANY_VALUE() Function Equivalents in MySQL 5.6?

ANY_VALUE 関数と MySQL の互換性

MySQL バージョン 5.6 には、MySQL 5.7 で導入された ANY_VALUE 関数がありません。これは、MySQL の新しいバージョンで ANY_VALUE 関数を使用しているが、運用環境では 5.6 を使用している開発者にとって課題となります。

SQL モードと互換性

MySQL の ONLY_FULL_GROUP_BY モードによりクエリが阻止されます。質問に示されているものと同様、GROUP に含まれていない列を取得します。 BY句。このモードをオフにすると、MySQL 5.6:

SET @mode := @@SESSION.sql_mode;
SET SESSION sql_mode = '';
/* your query here */
SET SESSION sql_mode = @mode;

でクエリを実行できるようになります。ただし、このアプローチは不確定な結果を生成する可能性があるため推奨されないことに注意してください。 ANY_VALUE 関数は、グループからランダムに選択された値を返すため、混乱やサポートの問題が発生する可能性があります。

MySQL 5.6 の代替クエリ

予測可能な結果を​​得るには、次のクエリを変更することを検討してください。各国の特定の画像を選択するためのクエリ。画像テーブルに自動インクリメント ID 列が含まれている場合は、次のクエリを使用できます。

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

このクエリにより、国ごとに 1 つの画像が返され、より一貫性と信頼性の高い結果セットが提供されます。

以上がMySQL 5.6 で同等の ANY_VALUE() 関数を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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