sql >> Databasteknik >  >> RDS >> Mysql

Använda en join med tre tabeller när ett fält kan vara null

Du gör en INNER JOIN, men du behöver en OUTTER JOIN, i synnerhet en LEFT JOIN. Med en LEFT JOIN är tabellen "till vänster" alltid sammanfogad, och om det inte finns någon korrespondens ställs fälten i tabellen till höger till null. Skillnaden förklaras mycket väl på denna wikipediasida .

Sedan måste du gruppera raderna med samma inlämnings-id och räkna hur många rader som har grupperats, se till att om en inlämning bara har en kommentar och en annan har ingen har de båda en grupperad rad... Om en inlämning inte har några kommentarer , i nästa fråga c.submissionid kommer att vara null, så

Din SQL kan vara

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

Det kan finnas fel, jag har inte testat frågan... Men jag hoppas att jag har gett dig rätt idé, det är skillnaden mellan yttre skarvar och inre skarvar.



  1. Returnerar en blob med json

  2. Hur databaser används i e-handel

  3. Ta bort spårfiler med ADRCI

  4. Hur lagrar jag dagliga poster från en mysql-tabell till en annan?