← 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ı.