Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Tidak Menyokong KECUALI dan Bagaimana Saya Boleh Mencapai Keputusan Yang Sama?

Mengapa MySQL Tidak Menyokong KECUALI dan Bagaimana Saya Boleh Mencapai Keputusan Yang Sama?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-03 19:06:09866semak imbas

Why Doesn't MySQL Support EXCEPT and How Can I Achieve the Same Result?

KECUALI Ralat Sintaks dalam Pertanyaan MySQL

Pengguna MySQL mungkin menghadapi ralat sintaks apabila cuba menggunakan operator EXCEPT dalam pertanyaan mereka. Ralat ini sering berlaku apabila cuba mengecualikan baris daripada jadual utama yang sepadan dengan syarat dalam subkueri.

Pertimbangkan contoh berikut:

SELECT s.sno
FROM students s
EXCEPT
SELECT t.sno
FROM take t
WHERE t.cno = 'CS112';

Pertanyaan ini cuba mendapatkan semua ID pelajar daripada jadual "pelajar" yang tidak terdapat dalam jadual "ambil" untuk kursus "CS112." Walau bagaimanapun, MySQL tidak menyokong sintaks KECUALI.

Penyelesaian Alternatif:

Untuk mencapai hasil yang diinginkan, terdapat dua pendekatan alternatif:

  1. TIDAK MASUK Subquery:
SELECT s.sno
FROM students s
WHERE s.sno NOT IN
(
    SELECT t.sno
    FROM take t
    WHERE t.cno = 'CS112'
);

Pertanyaan ini secara jelas menyemak sama ada ID pelajar dalam jadual "pelajar" tidak terdapat dalam jadual "ambil" untuk kursus "CS112."

  1. KIRI SERTAI dengan NULL Semak:
SELECT s.sno
FROM students s
LEFT JOIN take t ON s.sno = t.sno
WHERE IFNULL(t.cno, '') != 'CS112';

Pertanyaan ini menggunakan LEFT JOIN untuk memadankan ID pelajar antara jadual "pelajar" dan "ambil". Ia kemudian menggunakan fungsi IFNULL untuk menyemak sama ada medan "cno" dalam jadual "ambil" adalah batal, menunjukkan pelajar tidak mendaftar dalam "CS112."

Contoh Penggunaan:

Menggunakan data olok-olok dalam soalan, semakan LEFT JOIN with NULL menghasilkan yang berikut hasil:

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

Output:

5
6
7
8
9
10

Oleh itu, daripada menggunakan sintaks KECUALI, pengguna boleh menggunakan subkueri NOT IN atau LEFT JOIN dengan strategi semakan NULL untuk mengecualikan baris dalam MySQL pertanyaan.

Atas ialah kandungan terperinci Mengapa MySQL Tidak Menyokong KECUALI dan Bagaimana Saya Boleh Mencapai Keputusan Yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn