ホームページ >データベース >mysql チュートリアル >バージョン 5.6 で MySQL の ANY_VALUE 関数を模倣するにはどうすればよいですか?
MySQL 5.6: ANY_VALUE 関数の代替
MySQL バージョン 5.7 および 5.6 を使用する場合、ANY_VALUE 関数に関する問題が発生する可能性があります。バージョン 5.7 でのみ利用可能です。これにより、クエリの実行中に混乱やエラーが発生する可能性があります。疑問が生じます: MySQL 5.6 で同様の機能をどのようにして取得できるでしょうか?
MySQL 5.6 には、ANY_VALUE と直接同等の機能はありません。ただし、目的の結果を達成できる別のアプローチもあります。
ONLY_FULL_GROUP_BY モードを無効にする
1 つのオプションは、ONLY_FULL_GROUP_BY SQL モードを無効にすることです。このモードでは、SELECT ステートメントで参照されるすべての非集計列が GROUP BY 句にも出現する必要があります。このモードを無効にすることで、MySQL はこのようなクエリをエラーなしで実行できるようになります:
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;
ONLY_FULL_GROUP_BY を無効にするには、次の構文を使用します:
SET @mode := @@SESSION.sql_mode; SET SESSION sql_mode = ''; /* your query here */ SET SESSION sql_mode = @mode;
ただし、これは重要です。 ONLY_FULL_GROUP_BY を無効にすると、一部の環境では誤った結果や予期しない動作が発生する可能性があることに注意してください。 case.
「最初の」値の選択
別の方法は、最初の値など、画像テーブルから特定の値を選択するようにクエリを変更することです。これは、MIN() 関数とサブクエリを使用して実現できます。
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 行を返します。画像はテーブル内の最初の画像で、ID 順に並べられます。このアプローチにより、予測可能で一貫した結果が得られます。
以上がバージョン 5.6 で MySQL の ANY_VALUE 関数を模倣するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。