Articles

MySQL :: MySQL 8.0 リファレンスマニュアル :: 13.2.11.6 EXISTS または NOT EXISTS を持つサブクエリ

Posted on

13.2.11.6 EXISTS または NOT EXISTS を持つサブクエリ

サブクエリがすべての行を返す場合。 EXISTS subqueryは、TRUENOT EXISTS subqueryは、FALSEです。 例えば、以下のようになります。

SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);

伝統的に、EXISTSSELECT *SELECT 5SELECT column1 などで始まることもあります。 MySQL は、このようなサブクエリの SELECT リストを無視するので、違いはありません。

前述の例では、t2EXISTSTRUE EXISTS サブクエリにはほとんどの場合、相関関係が含まれているので、これは実際にはあり得ない例です。

  • 1つまたは複数の都市に存在する店舗の種類は?

    SELECT DISTINCT store_type FROM stores WHERE EXISTS (SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type);
  • どのようなお店がどの都市にも存在しないか?

    SELECT DISTINCT store_type FROM stores WHERE NOT EXISTS (SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type);
  • すべての都市にあるのはどんなお店ですか?

    SELECT DISTINCT store_type FROM stores s1 WHERE NOT EXISTS ( SELECT * FROM cities WHERE NOT EXISTS ( SELECT * FROM cities_stores WHERE cities_stores.city = cities.city AND cities_stores.store_type = stores.store_type));

最後の例は、二重に入れ子になった NOT EXISTSNOT EXISTSNOT EXISTSStoresNOT EXISTSxTRUE for all yであるか」という質問に答えると言った方が簡単です。”

MySQL 8.0.19以降では、NOT EXISTSNOT EXISTSTABLEを添えて、以下のようにサブクエリで使用することもできます。

SELECT column1 FROM t1 WHERE EXISTS (TABLE t2);

SELECT *句を入れない場合と同じ結果になります

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です