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 語法。
替代解決方案:
要達到所需的結果,有兩種替代方法:
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」欄位是否為空,表示學生未註冊「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中文網其他相關文章!