ホームページ >データベース >mysql チュートリアル >MySQL が EXCEPT をサポートしないのはなぜですか? 同じ結果を得るにはどうすればよいですか?

MySQL が EXCEPT をサポートしないのはなぜですか? 同じ結果を得るにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-03 19:06:09866ブラウズ

Why Doesn't MySQL Support EXCEPT and How Can I Achieve the Same Result?

MySQL クエリの EXCEPT 構文エラー

MySQL ユーザーがクエリで EXCEPT 演算子を使用しようとすると、構文エラーが発生する場合があります。このエラーは、サブクエリの条件に一致する行をメイン テーブルから除外しようとしたときによく発生します。

次の例を考えてみましょう。

SELECT s.sno
FROM students s
EXCEPT
SELECT t.sno
FROM take t
WHERE t.cno = 'CS112';

このクエリは、すべての学生 ID を取得しようとします。コース「CS112」の「take」テーブルには存在しない「students」テーブル。ただし、MySQL は EXCEPT 構文をサポートしません。

代替ソリューション:

望ましい結果を達成するには、2 つの代替アプローチがあります:

  1. 入っていませんサブクエリ:
SELECT s.sno
FROM students s
WHERE s.sno NOT IN
(
    SELECT t.sno
    FROM take t
    WHERE t.cno = 'CS112'
);

このクエリは、「students」テーブルの学生 ID がコース「CS112」の「take」テーブルに存在しないかどうかを明示的にチェックします。

  1. NULL による左結合チェック:
SELECT s.sno
FROM students s
LEFT JOIN take t ON s.sno = t.sno
WHERE IFNULL(t.cno, '') != 'CS112';

このクエリは、LEFT JOIN を使用して、「students」テーブルと「take」テーブルの間で学生 ID を照合します。次に、IFNULL 関数を使用して、「take」テーブルの「cno」フィールドが null かどうかを確認します。これは、学生が「CS112」に登録されていないことを示します。

使用例:

質問内のモックアップデータを使用して、NULL を使用した LEFT JOIN チェックにより次のものが生成されます。 result:

SELECT s.sno
FROM temp_students s
LEFT JOIN temp_take t ON s.sno = t.sno
WHERE IFNULL(t.cno, '') != 'CS112';

Output:

5
6
7
8
9
10

したがって、ユーザーは、EXCEPT 構文を使用する代わりに、NOT IN サブクエリまたは NULL を使用した LEFT JOIN チェック戦略を使用して、MySQL の行を除外できます。クエリ。

以上がMySQL が EXCEPT をサポートしないのはなぜですか? 同じ結果を得るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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