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
Lepaskan: 2025-01-23 16:02:11
asal
964 orang telah melayarinya

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

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

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!

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