Rumah >pangkalan data >tutorial mysql >Bagaimanakah Klausa WHERE Mempengaruhi Gelagat LEFT JOIN dalam SQL?
Gelagat Sertai Kiri di Klausa WHERE
Dalam SQL, cantuman kiri bertujuan untuk memasukkan semua baris dari jadual kiri, walaupun terdapat tiada baris yang sepadan dalam jadual yang betul. Walau bagaimanapun, syarat tertentu boleh mengubah tingkah laku lalai ini.
Pertimbangkan 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'
Dalam pertanyaan ini, cantuman kiri antara tableTwo dan tableThree ditukar dengan berkesan menjadi cantuman dalaman kerana keadaan dalam klausa WHERE, c.foobar = 'somethingelse'. Ini kerana menyatakan nilai bukan NULL dari sebelah kanan cantuman kiri (di sini, 'sesuatu yang lain') dalam klausa WHERE menghapuskan mana-mana baris dengan lajur yang sepadan ialah NULL, menghasilkan gelagat cantuman dalaman.
Oleh itu, pertanyaan hanya mengembalikan baris daripada tableOne dan tableTwo yang mempunyai baris yang sepadan dalam tableThree dengan nilai bukan NULL untuk c.foobar. Untuk mengekalkan gelagat join kiri yang diingini, pertimbangkan penyelesaian berikut:
1. Sertakan NULL dalam Klausa WHERE:
Gantikan syarat c.foobar = 'somethingelse' dengan DAN (c.foobar = 'somethingelse' ATAU c.foobar IS NULL) untuk memasukkan baris dengan foobar sama ada ' somethingelse' atau NULL.
2. Pindahkan Syarat untuk Menyertai Predikat:
Alihkan c.foobar = 'somethingelse' daripada klausa WHERE ke predikat gabungan:
LEFT JOIN tableThree AS c ON b.pk = c.fk AND c.foobar = 'somethingelse'
Dengan melakukan ini, pertanyaan mengekalkan gelagat gabungan kiri sambil masih menapis keluar baris berdasarkan nilai c.foobar.
Atas ialah kandungan terperinci Bagaimanakah Klausa WHERE Mempengaruhi Gelagat LEFT JOIN dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!