ホームページ >データベース >mysql チュートリアル >MySQL が EXCEPT をサポートしないのはなぜですか? 同じ結果を得るにはどうすればよいですか?
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 つの代替アプローチがあります:
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」テーブルに存在しないかどうかを明示的にチェックします。
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 サイトの他の関連記事を参照してください。