sql >> Databáze >  >> RDS >> Mysql

Použití spojení se třemi tabulkami, když pole může mít hodnotu null

Provádíte INNER JOIN, ale potřebujete OUTER JOIN, konkrétně LEFT JOIN. S LEFT JOIN je tabulka "vlevo" vždy spojena, a pokud neexistuje žádná korespondence, pole tabulky vpravo jsou nastavena na null. Rozdíl je velmi dobře vysvětlen na této stránce wikipedie .

Poté musíte seskupit řádky se stejným ID příspěvku a spočítat, kolik řádků bylo seskupeno, přičemž dbejte na to, aby pokud jeden příspěvek měl pouze jeden komentář a druhý žádný, oba měly 1 seskupený řádek... Pokud jeden příspěvek nemá žádné komentáře , v dalším dotazu c.submissionid bude null, takže

Vaše SQL může být

SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid, 
IF(c.submissionid IS NULL, 0, COUNT(*))  AS countComments
FROM submission AS s
INNER JOIN login AS l ON l.loginid = s.loginid
LEFT JOIN comments AS c ON c.submissionid = s.id
GROUP BY (s.id)
ORDER BY s.datesubmitted DESC
LIMIT 10

Mohou tam být chyby, dotaz jsem netestoval... Ale doufám, že jsem vám dal správnou představu, to je rozdíl mezi vnějšími a vnitřními spojeními.



  1. Formátování čísel pomocí odsazení úvodními nulami v SQL Server

  2. Existuje jednodušší způsob, jak dosáhnout tohoto stylu uživatelského zasílání zpráv?

  3. Co může plán dotazů prozradit?

  4. Jaký je výchozí název omezení v SQL Server?