首頁 >資料庫 >mysql教程 >如何在不使用EXCEPT子句的情況下實作MySQL中的EXCEPT功能?

如何在不使用EXCEPT子句的情況下實作MySQL中的EXCEPT功能?

Barbara Streisand
Barbara Streisand原創
2024-12-31 13:26:14191瀏覽

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

MySQL 查詢中的EXCEPT 語法錯誤

查詢「SELECT s.sno FROM Students s EXCEPT SELECT take take take take take take take .cno = 'CS112';"因語法錯誤而失敗。這是因為 MySQL 不支援 EXCEPT 語法。

為了達到排除參加 CS112 課​​程的學生的預期結果,必須使用替代方法。

NOT IN Clause

一種選擇是使用NOT IN子句:

SELECT s.sno 
FROM students s    
WHERE s.sno NOT IN 
(
    SELECT t.sno 
    FROM take t 
    WHERE t.cno = 'CS112'
);

此查詢選擇子查詢中未找到的所有查詢學生sno,該子查詢從課程CS112 的take 表中檢索sno。

LEFT JOIN

另一種方法是使用 LEFT JOIN:

SELECT s.sno 
FROM students s    
    LEFT JOIN take t ON s.sno = t.sno
WHERE IFNULL(t.cno, '') != 'CS112'

此查詢使用左聯接來合併學生並取得表格。 IFNULL() 函數用於處理 cno 欄位中的空值,條件檢查 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'

此查詢傳回sno 的5 到10,不包括參加過CS112 課​​程的學生。

以上是如何在不使用EXCEPT子句的情況下實作MySQL中的EXCEPT功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn