MySQL クエリの EXCEPT 構文エラー
クエリ「SELECT s.sno FROM students s EXCEPT SELECT t.sno FROM take t WHERE t」 .cno = 'CS112';"構文エラーで失敗します。これは、MySQL が EXCEPT 構文をサポートしていないためです。
コース CS112 を受講した学生を除外するという望ましい結果を達成するには、別のアプローチを使用する必要があります。
NOT IN Clause
1 つのオプションは、NOT IN を使用することです。句:
SELECT s.sno FROM students s WHERE s.sno NOT IN ( SELECT t.sno FROM take t WHERE t.cno = 'CS112' );
このクエリは、コース CS112 の取得テーブルから sno を取得するサブクエリで見つからないすべての学生の sno を選択します。
LEFT JOIN
もう 1 つの方法は、LEFT を使用することですJOIN:
SELECT s.sno FROM students s LEFT JOIN take t ON s.sno = t.sno WHERE IFNULL(t.cno, '') != 'CS112'
このクエリは、左結合を使用して学生をマージし、テーブルを取得します。 IFNULL() 関数は、cno 列の null 値を処理するために使用され、条件は、コースを受講した学生を除いて、cno 値が「CS112」と等しくないかどうかをチェックします。
使用例
提供された例では、モックを使用して LEFT JOIN アプローチが示されています。データセット:
create temporary table temp_students (sno int) insert into temp_students values (1) insert into temp_students values (2) insert into temp_students values (3) insert into temp_students values (4) insert into temp_students values (5) insert into temp_students values (6) insert into temp_students values (7) insert into temp_students values (8) insert into temp_students values (9) insert into temp_students values (10) create temporary table temp_take (sno int, cno varchar(50)) insert into temp_take values (1, 'CS112') insert into temp_take values (2, 'CS112') insert into temp_take values (3, 'CS112') insert into temp_take values (4, 'CS112') SELECT s.sno FROM temp_students s LEFT JOIN temp_take t ON s.sno = t.sno WHERE IFNULL(t.cno, '') != 'CS112'
このクエリは、CS112 コースを受講した学生を除き、sno の 5 ~ 10 を返します。
以上がEXCEPT 句を使用せずに MySQL で EXCEPT 機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。