Rumah >pangkalan data >tutorial mysql >Mengapa Baris Tiada daripada Keputusan Sertai Luar Kiri Saya?
Memahami Baris Hilang dalam Sambungan Luar Kiri
Seorang pengguna yang cuba mengira paparan halaman harian menemui perangkap gabungan luar kiri yang biasa: tiada baris dari jadual kiri. Pertanyaan bertujuan untuk menggabungkan data daripada day
dan tracking
jadual menggunakan gabungan luar kiri:
<code class="language-sql">SELECT day.days, COUNT(*) as opens FROM day LEFT OUTER JOIN tracking ON day.days = DAY(FROM_UNIXTIME(open_date)) WHERE tracking.open_id = 10 GROUP BY day.days</code>
Jadual day
mengandungi data untuk hari 1-30, tetapi hasilnya hanya menunjukkan hari 1 dan 9. Percanggahan ini timbul daripada peletakan klausa WHERE
.
Masalahnya: Peletakan Klausa WHERE Salah
Fasal WHERE tracking.open_id = 10
menapis selepas gabungan. Ini bermakna ia mengalih keluar baris yang tracking.open_id
bukan 10, walaupun baris tersebut berasal dari jadual kiri (day
). Cantuman luar kiri direka bentuk untuk memasukkan semua baris dari jadual kiri, tanpa mengira padanan dalam jadual kanan. Klausa WHERE
secara berkesan menafikan tingkah laku ini.
Penyelesaian: Mengintegrasikan Penapis ke dalam Keadaan JOIN
Untuk mendapatkan semula semua hari dengan betul daripada jadual day
, keadaan penapisan mesti disepadukan ke dalam keadaan JOIN
itu sendiri:
<code class="language-sql">SELECT day.days, COUNT(*) as opens FROM day LEFT OUTER JOIN tracking ON day.days = DAY(FROM_UNIXTIME(open_date)) AND tracking.open_id = 10 GROUP BY day.days</code>
Dengan mengalihkan tracking.open_id = 10
ke dalam klausa ON
, penapisan berlaku sebelum baris digabungkan. Ini memastikan bahawa hanya baris yang sepadan daripada jadual tracking
(di mana open_id = 10
) dipertimbangkan semasa pencantuman, sementara masih mengekalkan semua baris daripada jadual day
dalam keputusan akhir. Ini menggambarkan dengan tepat niat gabungan luar kiri.
Atas ialah kandungan terperinci Mengapa Baris Tiada daripada Keputusan Sertai Luar Kiri Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!