Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencari Rekod Hilang Dengan Cekap Menggunakan SQL `TIDAK WUJUD`?

Bagaimana untuk Mencari Rekod Hilang Dengan Cekap Menggunakan SQL `TIDAK WUJUD`?

Patricia Arquette
Patricia Arquetteasal
2024-12-10 09:52:101064semak imbas

How to Efficiently Find Missing Records Using SQL's `NOT EXISTS`?

PILIH * MANA TIDAK WUJUD: Mencari Rekod Hilang

Pertanyaan SQL "SELECT * from employees WHERE NOT EXISTS (SELECT name FROM eotm_dyn) " bertujuan untuk mendapatkan semula semua baris daripada jadual "pekerja" di mana nama mereka tidak terdapat dalam jadual "eotm_dyn". Walau bagaimanapun, pertanyaan ini tidak lengkap dan tidak akan mengembalikan hasil.

Untuk melengkapkan pertanyaan, adalah perlu untuk menyertai dua jadual pada medan biasa, biasanya medan pengecam unik. Dengan mengandaikan jadual dicantumkan pada medan "employeeID", pertanyaan yang diperbetulkan menjadi:

SELECT *
FROM employees e
WHERE NOT EXISTS
(
    SELECT null
    FROM eotm_dyn d
    WHERE d.employeeID = e.id
)

Subquery "NOT EXISTS" menyemak ketiadaan sebarang baris dalam jadual "eotm_dyn" di mana "employeeID" sepadan dengan "id" baris semasa dalam jadual "pekerja". Jika tiada baris sedemikian wujud, pertanyaan luar akan mengembalikan keseluruhan baris daripada jadual "pekerja". Pendekatan ini memastikan bahawa hanya pekerja tanpa entri dalam jadual "eotm_dyn" dipilih.

Sebagai alternatif, pertanyaan boleh ditulis menggunakan LEFT JOIN dengan penapis seterusnya untuk nilai NULL:

SELECT *
FROM employees e
LEFT JOIN eotm_dyn d
ON e.id = d.employeeID
WHERE d.name IS NULL

Walau bagaimanapun, kaedah ini mungkin kurang cekap berbanding menggunakan subkueri NOT EXISTS, terutamanya untuk pangkalan data yang besar.

Atas ialah kandungan terperinci Bagaimana untuk Mencari Rekod Hilang Dengan Cekap Menggunakan SQL `TIDAK WUJUD`?. 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