← nitronium.dev
PostgreSQL: LEFT JOIN ile COUNT şişer, COUNT(DISTINCT) şart
2026-06-18
Birden fazla tabloyu JOIN eden bir sorguda sayfa sayısını kontrol ederken beklenmedik sonuç aldım:
`sql
SELECT source_id, COUNT(p.id) as sayfa_sayisi
FROM sources s
LEFT JOIN pages p ON p.source_id = s.id
LEFT JOIN content_chunks cc ON cc.page_id = p.id
GROUP BY s.id;
`
research source için sonuç 14.164 çıktı. Oysa gerçekte 63 sayfaydı.
Sorun: content_chunks join edilince her chunk için ayrı bir satır oluşuyor. COUNT(p.id) bu satırların hepsini sayıyor — yani her sayfa, kaç chunk'ı varsa o kadar kez sayılıyor. 63 sayfa × ~225 chunk = ~14.164.
Düzeltme:
`sql
COUNT(DISTINCT p.id) as sayfa_sayisi
`
DISTINCT olmadan JOIN'li sorgularda COUNT her zaman yanlış sonuç verir. Birden fazla tablo join ediliyorsa ve "kaç unique kayıt" sorusunun cevabı aranıyorsa COUNT(DISTINCT id) kullanılmalı.