Dalam alam wizard pangkalan data, melakukan pengambilan data kompleks menggunakan cantuman kiri adalah amalan biasa. Walau bagaimanapun, kadangkala, cantuman kiri tidak berkelakuan seperti yang diharapkan.
Bayangkan pertanyaan 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';
Menariknya, apabila keadaan c.foobar diletakkan dalam klausa WHERE sebagai di atas, cantuman kiri nampaknya berubah menjadi cantuman dalam. Keputusan dikembalikan hanya jika kedua-dua kriteria a.foo dan c.foobar dipenuhi.
Mengapa metamorfosis? Kuncinya terletak pada klausa WHERE. Apabila nilai dari sebelah kanan cantuman kiri (sebelah kanan merujuk kepada jadual di sebelah kanan klausa ON) ditentukan dalam klausa WHERE, semua nilai NULL dibuang, dengan berkesan mengurangkan cantuman kiri kepada cantuman dalaman. Ringkasnya, jika c.foobar tidak terdapat dalam tableThree, pertanyaan tidak mengembalikan baris.
Untuk memintas kesusahan ini, terdapat dua pilihan:
AND (c.foobar = 'somethingelse' OR c.foobar IS NULL)
LEFT JOIN tableThree AS c ON b.pk = c.fk AND c.foobar = 'somethingelse'
Memilih antara penyelesaian ini bergantung pada yang khusus keperluan pertanyaan. Walau bagaimanapun, memahami gelagat asas cantuman kiri dengan kehadiran klausa WHERE adalah penting untuk menguasai teknik mendapatkan data.
Atas ialah kandungan terperinci Mengapa Cantuman Kiri Saya Bertindak Seperti Cantuman Dalam Apabila Menapis pada Lajur Jadual Kanan dalam Klausa WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!