Rumah >pangkalan data >tutorial mysql >Mengapa Sambungan Luar Kiri Saya Hanya Mengembalikan Dua Baris Daripada Tiga Puluh?
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!