Rumah >pangkalan data >tutorial mysql >Mengapa Sambungan Luar Kiri Saya Hanya Mengembalikan Dua Baris Daripada Tiga Puluh?

Mengapa Sambungan Luar Kiri Saya Hanya Mengembalikan Dua Baris Daripada Tiga Puluh?

Susan Sarandon
Susan Sarandonasal
2025-01-23 16:02:11922semak imbas

Why Does My Left Outer Join Only Return Two Rows Instead of Thirty?

Menyelesaikan Masalah Sambungan Luar Kiri: Mengapa Hanya Dua Baris Dikembalikan

Seorang pengguna cuba mengira paparan halaman harian menggunakan gabungan luar kiri, tetapi pertanyaan itu secara tidak dijangka hanya mengembalikan dua baris dan bukannya tiga puluh yang dijangkakan. Mari kita periksa pertanyaan bermasalah dan penyelesaiannya.

Pertanyaan asal:

<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>

Masalahnya: Klausa MANA Selepas JOIN

Isunya terletak pada klausa WHERE tracking.open_id = 10. Syarat ini digunakan selepas cantuman luar kiri. Cantuman luar kiri direka bentuk untuk memasukkan semua baris daripada jadual kiri (day), walaupun tiada padanan dalam jadual kanan (tracking). Walau bagaimanapun, klausa WHERE menapis dengan berkesan mana-mana baris yang tracking.open_id bukan 10, sekali gus menghapuskan baris daripada jadual day yang tidak mempunyai entri sepadan dalam tracking dengan open_id = 10.

Penyelesaian: Mengintegrasikan Syarat ke dalam JOIN

Untuk mendapatkan kesemua tiga puluh baris daripada jadual day, syarat penapisan perlu menjadi sebahagian daripada syarat cantum itu sendiri. Ini dicapai menggunakan AND:

<code class="language-sql">SELECT day.days, COUNT(tracking.open_id) 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>

Perhatikan perubahan kepada COUNT(tracking.open_id): Ini memastikan bahawa hari tanpa entri yang sepadan dalam tracking akan mempunyai kiraan 0, bukannya NULL, yang akan menyebabkan masalah dengan beberapa sistem pangkalan data. Pertanyaan yang diperbetulkan ini melakukan gabungan luar kiri dengan betul dan mengembalikan tiga puluh baris yang dijangkakan, mewakili halaman harian dibuka dengan tepat.

Atas ialah kandungan terperinci Mengapa Sambungan Luar Kiri Saya Hanya Mengembalikan Dua Baris Daripada Tiga Puluh?. 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