The Quirks of Left Joins and WHERE Clauses
Apabila menjalankan operasi pengambilan data, pembangun sering menggunakan gabungan kiri untuk menggabungkan maklumat daripada berbilang jadual. Walau bagaimanapun, perangkap biasa timbul apabila menggunakan klausa WHERE bersama dengan cantuman kiri, yang berpotensi mengubah tingkah laku cantuman kiri.
Pertimbangkan pernyataan SQL berikut:
SELECT a.foo b.bar c.foobar FROM tableOne AS a INNER JOIN tableTwo AS b ON a.pk = b.fk LEFT JOIN tableThree AS c ON b.pk = c.fk WHERE a.foo = 'something' AND c.foobar = 'somethingelse'
Secara intuitif, seseorang akan jangkakan penyataan ini melakukan cantuman kiri antara tableThree dan tableTwo, menyatakan keadaan penapis untuk c.foobar. Walau bagaimanapun, kehadiran klausa WHERE yang mengandungi c.foobar = 'somethingelse' secara tidak sengaja mengubah ciri cantuman kiri.
Apabila nilai dari sebelah kanan cantuman kiri (dalam kes ini, c.foobar) ialah termasuk dalam klausa WHERE, hanya baris dengan nilai NOT NULL disertakan dalam set hasil. Oleh itu, cantuman kiri berkesan berkelakuan seperti cantuman dalam, menghapuskan semua baris dengan nilai NULL untuk c.foobar.
Untuk mengekalkan gelagat yang dimaksudkan bagi cantuman kiri dalam contoh di atas, seseorang boleh menggunakan salah satu daripada yang berikut pendekatan:
Atas ialah kandungan terperinci Left Joins dan Klausa WHERE: Bagaimana Ia Berinteraksi, dan Bagaimana Saya Boleh Mengelakkan Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!