Rumah > pangkalan data > tutorial mysql > Mengapa Gabungan Luar Kiri Saya Tidak Mengembalikan Semua Baris dari Jadual Kiri?

Mengapa Gabungan Luar Kiri Saya Tidak Mengembalikan Semua Baris dari Jadual Kiri?

Patricia Arquette
Lepaskan: 2025-01-23 15:51:10
asal
617 orang telah melayarinya

Why Doesn't My Left Outer Join Return All Rows from the Left Table?

Gabungan Luar Kiri: Memastikan Pendapatan Data Lengkap dari Jadual Kiri

Salah tanggapan biasa dengan cantuman luar kiri ialah mereka sentiasa mengembalikan semua baris dari jadual kiri. Ini tidak selalu benar; baris daripada jadual kiri akan diketepikan jika tiada baris yang sepadan wujud dalam jadual kanan berdasarkan syarat cantuman.

Mari kita gambarkan ini dengan contoh. Bayangkan pertanyaan yang direka untuk mengira paparan halaman harian untuk pengguna tertentu (open_id):

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

Pertanyaan ini bertujuan untuk memaparkan semua hari dan kiraan tontonan yang berkaitan. Walau bagaimanapun, jika day mengandungi entri untuk setiap hari dalam bulan itu, tetapi tracking kekurangan entri untuk beberapa hari untuk open_id = 10, hari-hari tersebut akan tiada dalam keputusan.

Penyelesaian terletak pada memasukkan WHERE syarat klausa ke dalam klausa ON gabungan:

<code class="language-sql">SELECT day.days, COUNT(tracking.open_date) AS views
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, syarat menjadi sebahagian daripada cantuman itu sendiri, bukan penapis pasca-cantum. Ini memastikan semua baris daripada jadual day disertakan, dengan views menunjukkan 0 untuk hari tanpa pemadanan entri dalam jadual tracking. Perhatikan penggunaan COUNT(tracking.open_date) dan bukannya COUNT(*) untuk menggambarkan bilangan tontonan dengan tepat; COUNT(*) masih akan mengira hari walaupun tiada baris yang sepadan dalam jadual yang betul.

Atas ialah kandungan terperinci Mengapa Gabungan Luar Kiri Saya Tidak Mengembalikan Semua Baris dari Jadual Kiri?. 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