Mengambil Data Yang Hilang Menggunakan "SELECT * WHERE NOT EXISTS"
Pengguna berhasrat untuk mengekstrak semua rekod daripada jadual "pekerja" di mana khusus sel tidak wujud dalam jadual "eotm_dyn". Untuk mencapai matlamat ini, pengguna menggunakan pertanyaan berikut:
SELECT * from employees WHERE NOT EXISTS (SELECT name FROM eotm_dyn)
Walau bagaimanapun, pertanyaan ini secara konsisten tidak menghasilkan hasil walaupun mengetahui bahawa kira-kira 20 nama tiada.
Memahami Isu
Ralat terletak pada kegagalan untuk menyertai dua jadual dalam pertanyaan. Seperti sedia ada, pertanyaan hanya menilai kewujudan nama dalam jadual "eotm_dyn" tanpa merujuk jadual "pekerja". Ini akan sentiasa mengembalikan palsu melainkan jadual "eotm_dyn" kosong.
Penyelesaian: Menyertai Jadual
Untuk menyertai jadual dan menapis nama yang tiada, ubah suai pertanyaan seperti berikut:
SELECT * FROM employees e WHERE NOT EXISTS ( SELECT null FROM eotm_dyn d WHERE d.employeeID = e.id )
Dalam pertanyaan yang diubah suai ini, LEFT JOIN secara tersirat dilakukan antara jadual "pekerja" dan "eotm_dyn" berdasarkan medan "employeeID" biasa. Klausa WHERE kemudiannya menggunakan NOT EXISTS untuk menapis sebarang rekod pekerja yang namanya (atau employeeID) tidak wujud dalam jadual "eotm_dyn".
Pendekatan Ganti: LEFT JOIN dan Menapis Nilai NULL
Sebagai alternatif, seseorang boleh menggunakan LEFT JOIN dan menapis nilai NULL seperti berikut:
SELECT * FROM employees e LEFT JOIN eotm_dyn d ON e.employeeID = d.employeeID WHERE d.name IS NULL
Pendekatan ini mungkin kurang cekap berbanding menggunakan NOT EXISTS, tetapi ia menawarkan kaedah mudah untuk mendapatkan semula data yang hilang.
Atas ialah kandungan terperinci Bagaimana untuk Cekap Mendapatkan Rekod Pekerja yang Hilang Menggunakan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!