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


13.2.11.2 サブクエリーを使用した比較

サブクエリーのもっとも一般的な使用の形式は次のとおりです。

non_subquery_operand comparison_operator (subquery)

ここで、comparison_operator は次の演算子のいずれかです。

=  >  <  >=  <=  <>  !=  <=>

例:

... WHERE 'a' = (SELECT column1 FROM t1)

MySQL では、次の構造構文も許可されます。

non_subquery_operand LIKE (subquery)

以前は、サブクエリーの唯一の正当な場所は比較の右側であり、この方法にこだわったいくつかの古い DBMS がまだ見つかることもあります。

結合では実行できない一般的な形式のサブクエリー比較の例を次に示します。 これは、column1 値がテーブル t2 内の最大値に等しいテーブル t1 内のすべての行を検索します。

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

次に別の例を示します。これもまた、いずれかのテーブルに対する集約が含まれているため、結合では実行できません。 これは、特定のカラムに 2 回現れる値を含むテーブル t1 内のすべての行を検索します。

SELECT * FROM t1 AS t
  WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);

スカラーに対するサブクエリーの比較の場合、サブクエリーはスカラーを返す必要があります。 行コンストラクタに対するサブクエリーの比較の場合、サブクエリーは、その行コンストラクタと同じ数の値を含む行を返す行サブクエリーである必要があります。 セクション13.2.11.5「行サブクエリー」を参照してください。


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