ホームページ >データベース >mysql チュートリアル >MySQL 5.6 で同等の ANY_VALUE() 関数を使用するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。