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
Lepaskan: 2025-01-03 19:06:09
asal
863 orang telah melayarinya

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';
Salin selepas log masuk

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'
);
Salin selepas log masuk

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';
Salin selepas log masuk

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';
Salin selepas log masuk

Output:

5
6
7
8
9
10
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan