ホームページ >データベース >mysql チュートリアル >EXCEPT 句を使用せずに MySQL で EXCEPT 機能を実現するにはどうすればよいですか?

EXCEPT 句を使用せずに MySQL で EXCEPT 機能を実現するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-31 13:26:14239ブラウズ

How to Achieve EXCEPT Functionality in MySQL Without Using the EXCEPT Clause?

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 サイトの他の関連記事を参照してください。

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