Autor | Zpráva | ||
---|---|---|---|
David Klouček Profil |
Z tabulky A chci vybrat všechny ID a k nim počet odpovídajících záznamů v tabulce B, dotaz bude vypadat takhle:
SELECT a.id, COUNT(b.id) AS c FROM a LEFT JOIN b ON b.a_id=a.id GROUP BY a.id Teď navíc potřebuju započítat z tabulky B jen záznamy, který mají v tabulce C status=1, napadlo mě: SELECT a.id, COUNT(b.id) AS c FROM a LEFT JOIN b ON b.a_id=a.id INNER JOIN c ON c.id=c.b_id AND c.status=1 GROUP BY a.id To sice funguje, ale nevrátí mi to řádek, pokud v tabulce B neni alspoň 1 odpovídající záznam. Vyřešil jsem to prozatím takhle: SELECT a.id , COUNT(z.id) AS c FROM a LEFT JOIN ( SELECT b.a_id AS id FROM b INNER JOIN c ON c.b_id=b.id AND c.status=1 ) AS z ON z.id=a.id GROUP BY a.id Tenhle dotaz je ale pomalej, protože v zanořenym dotazu se nejprve vyberou všechny záznamy se statusem 1 a až pak se vyfiltrují podle ID. Máte někdo nápad na lepší řešení? |
||
Kajman Profil |
V poddotaze použijte group by a spojte až výsledek. Nebo v tom prvním pokusu použijte ĺeft join i pro tabulku c.
|
||
Časová prodleva: 6 let
|
0