首頁 >資料庫 >mysql教程 >為什麼 MySQL 不支援 EXCEPT,如何達到相同的結果?

為什麼 MySQL 不支援 EXCEPT,如何達到相同的結果?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-03 19:06:09862瀏覽

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」的「參加」表中不存在的「學生」表。但是,MySQL 不支援 EXCEPT 語法。

替代解決方案:

要達到所需的結果,有兩種替代方法:

  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. LEFT JOIN 與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」欄位是否為空,表示學生未註冊「CS112」。

範例用法:

使用問題中的模擬數據,具有NULL 檢查的LEFT JOIN 產生以下結果結果:

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

輸出:

5
6
7
8
9
10

因此,使用者可以使用NOT IN 子查詢或帶有NULL檢查策略的 LEFT JOIN 來排除 MySQL 中的行,而不是使用 EXCEPT 語法查詢。

以上是為什麼 MySQL 不支援 EXCEPT,如何達到相同的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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