Rumah >pangkalan data >tutorial mysql >Mengapa Baris Tiada daripada Keputusan Sertai Luar Kiri Saya?

Mengapa Baris Tiada daripada Keputusan Sertai Luar Kiri Saya?

Linda Hamilton
Linda Hamiltonasal
2025-01-23 16:13:13920semak imbas

Why are Rows Missing from My Left Outer Join Result?

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!

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