Rumah >pangkalan data >tutorial mysql >Bagaimanakah Klausa WHERE Mempengaruhi Gelagat LEFT JOIN dalam SQL?

Bagaimanakah Klausa WHERE Mempengaruhi Gelagat LEFT JOIN dalam SQL?

Barbara Streisand
Barbara Streisandasal
2025-01-03 20:58:43684semak imbas

How Does a WHERE Clause Affect a LEFT JOIN's Behavior in 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!

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