Mam następujące zapytanie SQL
SELECT f.ID, f.itemType,
SUM(CASE WHEN o.ID THEN 1 ELSE 0 END) AS opened,
SUM(CASE WHEN d.ID THEN 1 ELSE 0 END) AS down
FROM tabela1 AS f
LEFT JOIN tabela2 AS o ON o.itemID = f.ID
LEFT JOIN tabela3 AS d ON d.itemID = f.ID
WHERE f.itemType = 'letterIn'
Wyjściowe założenie jest takie, żeby pobrać ID
i itemType
elementu znajdującego się w tabela1
oraz liczbę odwołań do tego elementu z tabela2
i tabela3
.
W przypadku gdy liczba wierszy w tabela2
lub/i tabela3
wynosi 0 wszystko działa prawidłowo i zwraca poprawne wyniki np. $row['opened'] = 3
i $row['down'] = 0
. Natomiast w przypadku gdy w obu tabelach występuje odniesienie do głównego elementu np. (3. odwołania w 'tabela2' oraz 2 odwołania w 'tabela3') wtedy w wyniku pojawiają się przemnożone wartości przemnożone przez siebie $row['opened'] = 6
i $row['down'] = 6
.
Gdzie tkwi błąd?