Memahami Kiraan Lawatan Tidak Tepat daripada Berbilang JOIN KIRI
Pertanyaan yang diberikan menjana kiraan lawatan yang salah kerana sifat urutan berbilang operasi LEFT JOIN
membawa kepada hasil darab, bukannya aditif.
Pada mulanya, menyertai jadual grocery
dengan betul mengira lawatan runcit setiap pengguna. Walau bagaimanapun, LEFT JOIN
berikutnya dengan fishmarket
mencipta berbilang baris untuk setiap pengguna, dengan berkesan mendarabkan kiraan lawatan kedai runcit dengan bilangan lawatan pasar ikan untuk setiap pengguna. Ini menerangkan kiraan "12" yang salah untuk pengguna yang melawat kedua-dua kedai.
Penyelesaian: Subkueri untuk Pengagregatan Tepat
Masalah diselesaikan menggunakan subkueri untuk mengagregat secara bebas kiraan lawatan untuk setiap kedai:
<code class="language-sql">SELECT u.id, u.account_balance, (SELECT COUNT(*) FROM grocery WHERE user_id = u.id) AS "# of grocery visits", (SELECT COUNT(*) FROM fishmarket WHERE user_id = u.id) AS "# of fishmarket visits" FROM users u ORDER BY u.id;</code>
Pertanyaan yang disemak ini mengira dan memaparkan lawatan runcit dan pasar ikan dengan tepat untuk setiap pengguna, memberikan data agregat yang betul.
Atas ialah kandungan terperinci Mengapakah Berbilang LEFT JOIN Menghasilkan Kiraan Lawatan yang Salah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!