Rumah > pangkalan data > tutorial mysql > Mengapa Dua SQL Saya LEFT JOIN Mengembalikan Kiraan Lawatan yang Salah?

Mengapa Dua SQL Saya LEFT JOIN Mengembalikan Kiraan Lawatan yang Salah?

Barbara Streisand
Lepaskan: 2025-01-23 12:27:10
asal
270 orang telah melayarinya

Why Are My Two SQL LEFT JOINS Returning Incorrect Visit Counts?

Menyahpepijat SQL LEFT JOIN: Kiraan Lawatan Tepat

Masalah biasa timbul apabila menggunakan berbilang LEFT JOINs dalam SQL untuk mengira lawatan merentas jadual yang berbeza. Contoh ini menggunakan tiga jadual: users, grocery dan fishmarket. Pertanyaan yang direka untuk mengira lawatan setiap pengguna ke kedai runcit dan pasar ikan menghasilkan keputusan yang tidak tepat.

Isu ini berpunca daripada sifat berurutan daripada cantuman. Pendekatan naif menyertai users dan grocery terlebih dahulu, mencipta baris untuk setiap pengguna dengan account_balance bukan nol dan lawatan runcit mereka. Gabungan seterusnya dengan fishmarket kemudian tersalah mendarabkan kiraan lawatan runcit dengan kiraan lawatan pasar ikan untuk setiap pengguna. Ini membawa kepada jumlah lawatan yang meningkat.

Penyelesaian melibatkan penstrukturan semula pertanyaan untuk mengagregat kiraan lawatan sebelum menyertai mereka ke jadual users. Ini dicapai dengan cekap menggunakan dua subkueri berkorelasi. Setiap subkueri secara bebas mengira lawatan sama ada untuk jadual grocery atau fishmarket, dikumpulkan mengikut user_id. Kiraan agregat ini kemudiannya dicantumkan ke jadual users, memastikan jumlah lawatan yang tepat.

Berikut ialah pertanyaan yang diperbetulkan menggunakan subkueri:

<code class="language-sql">SELECT u.id, u.account_balance, g.grocery_visits, f.fishmarket_visits
FROM users u
LEFT JOIN (
    SELECT user_id, COUNT(*) AS grocery_visits
    FROM grocery
    GROUP BY user_id
) g ON g.user_id = u.id
LEFT JOIN (
    SELECT user_id, COUNT(*) AS fishmarket_visits
    FROM fishmarket
    GROUP BY user_id
) f ON f.user_id = u.id
ORDER BY u.id;</code>
Salin selepas log masuk

Pertanyaan yang disemak ini memberikan kiraan yang tepat dan bebas bagi lawatan kedai runcit dan pasar ikan untuk setiap pengguna, menyelesaikan ralat pendaraban pertanyaan asal.

Atas ialah kandungan terperinci Mengapa Dua SQL Saya LEFT JOIN Mengembalikan Kiraan Lawatan yang Salah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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