Rumah > pangkalan data > tutorial mysql > Mengapa PostgreSQL Saya LEFT JOIN Query Melipatgandakan Kiraan Daripada Memeliharanya?

Mengapa PostgreSQL Saya LEFT JOIN Query Melipatgandakan Kiraan Daripada Memeliharanya?

Linda Hamilton
Lepaskan: 2025-01-23 12:23:10
asal
423 orang telah melayarinya

Why Does My PostgreSQL LEFT JOIN Query Multiply Counts Instead of Preserving Them?

PostgreSQL LEFT JOIN: Pendaraban Kiraan Baris Tidak Dijangka

Pertanyaan PostgreSQL 9.1 menggunakan berbilang LEFT JOIN secara tidak dijangka mendarabkan bilangan baris dan bukannya mengekalkannya. Pertanyaan bertujuan untuk mendapatkan ID pengguna, baki akaun, kiraan lawatan kedai runcit dan kiraan lawatan pasar ikan. Pertanyaan yang cacat menghasilkan kiraan yang salah, menunjukkan nilai berulang dan bukannya kiraan sebenar.

Isu ini timbul daripada perintah pemprosesan JOIN dari kiri ke kanan PostgreSQL. JOIN seterusnya mereplikasi baris daripada gabungan sebelumnya, yang membawa kepada mengira inflasi. Sebagai contoh, jika terdapat 3 lawatan runcit dan 12 lawatan pasar ikan, keputusan menunjukkan 12 penyertaan untuk setiap satu dan bukannya 3 dan 12 yang dijangkakan.

Penyelesaian melibatkan pra-agregat kiraan lawatan sebelum menyertai. Ini mengelakkan masalah pendaraban baris. Pertanyaan yang diperbetulkan ialah:

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;
Salin selepas log masuk

Pertanyaan yang disemak ini dengan betul mengembalikan kiraan individu untuk lawatan runcit dan pasar ikan bagi setiap pengguna, menyelesaikan isu pendaraban. Sebagai contoh, jika pengguna mempunyai 3 lawatan runcit dan 4 lawatan pasar ikan, output menggambarkan ini dengan tepat, mengelakkan ulangan yang salah yang dilihat dalam pertanyaan asal.

Atas ialah kandungan terperinci Mengapa PostgreSQL Saya LEFT JOIN Query Melipatgandakan Kiraan Daripada Memeliharanya?. 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