ホームページ >データベース >mysql チュートリアル >バージョン 5.6 で MySQL の ANY_VALUE 関数を模倣するにはどうすればよいですか?

バージョン 5.6 で MySQL の ANY_VALUE 関数を模倣するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-29 22:12:11413ブラウズ

How to Mimic MySQL's ANY_VALUE Function in Version 5.6?

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

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