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
Lepaskan: 2025-01-23 16:13:13
asal
963 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan