Rumah >pangkalan data >tutorial mysql >Mengapa Gabungan Luar Kiri Saya Hanya Mengembalikan Data Separa Dari Jadual Kiri?
Bercantum Luar Kiri dan Data Tidak Lengkap daripada Jadual Kiri
Memahami cara syarat sambung mempengaruhi keputusan sambung luar kiri adalah penting. Keadaan yang tidak diletakkan dengan betul boleh menyebabkan data tidak lengkap dari jadual kiri.
Mari kita periksa pertanyaan ini:
<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>
Pertanyaan ini bertujuan untuk mengira halaman harian dibuka. Walau bagaimanapun, ia mungkin hanya dipaparkan beberapa hari, walaupun jadual day
mempunyai banyak lagi. Masalahnya terletak pada klausa WHERE
.
Syarat menyertai ON day.days = DAY(FROM_UNIXTIME(open_date))
sepadan dengan hari dengan betul. Tetapi, WHERE tracking.open_id = 10
menapis selepas gabungan, mengalih keluar sebarang hari tanpa open_id = 10
dalam jadual tracking
.
Untuk memasukkan semua hari dari jadual sebelah kiri (day
), tanpa mengira padanan dalam tracking
, alihkan syarat open_id
ke dalam klausa ON
:
<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>
Pertanyaan yang diperbetulkan ini memastikan semua hari disertakan, menyediakan kiraan buka halaman harian yang lengkap, walaupun beberapa hari kekurangan entri dalam jadual tracking
dengan open_id = 10
. COUNT(*)
akan mengembalikan 0 untuk hari tersebut.
Atas ialah kandungan terperinci Mengapa Gabungan Luar Kiri Saya Hanya Mengembalikan Data Separa Dari Jadual Kiri?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!