MySQL 8.0 リファレンスマニュアル


13.2.11.7 相関サブクエリー

相関サブクエリーは、外部クエリーにも現れるテーブルへの参照を含むサブクエリーです。 例:

SELECT * FROM t1
  WHERE column1 = ANY (SELECT column1 FROM t2
                       WHERE t2.column2 = t1.column2);

このサブクエリーには、サブクエリーの FROM 句でテーブル t1 が指定されていない場合でも、t1 のカラムへの参照が含まれます。 そのため、MySQL はこのサブクエリーの外部を探し、外部クエリー内の t1 を見つけます。

テーブル t1column1 = 5 かつ column2 = 6 である行が含まれている一方、テーブル t2column1 = 5 かつ column2 = 7 である行が含まれているとします。 単純な式 ... WHERE column1 = ANY (SELECT column1 FROM t2)TRUE になりますが、この例では、サブクエリー内の WHERE 句は ((5,6)(5,7) に等しくないため) FALSE です。そのため、全体としての式は FALSE です。

スコープルール: MySQL は、内部から外部に評価します。 例:

SELECT column1 FROM t1 AS x
  WHERE x.column1 = (SELECT column1 FROM t2 AS x
    WHERE x.column1 = (SELECT column1 FROM t3
      WHERE x.column2 = t3.column1));

このステートメントでは、SELECT column1 FROM t2 AS x ...t2 の名前を変更するため、x.column2 はテーブル t2 内のカラムである必要があります。 SELECT column1 FROM t1 ...さらに外部にある外部クエリーであるため、これはテーブル t1 内のカラムではありません。


関連キーワード:  ステートメント, CREATE, サブクエリー, TABLE, column, DROP, FUNCTION, テーブル, SLAVE, 相関