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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0