sql >> Database >  >> RDS >> Mysql

Een join gebruiken met drie tabellen wanneer een veld mogelijk null is

Je doet een INNER JOIN, maar je hebt een OUTER JOIN nodig, in het bijzonder een LEFT JOIN. Bij een LEFT JOIN wordt de tabel "aan de linkerkant" altijd samengevoegd, en als er geen overeenkomst is, worden de velden van de tabel aan de rechterkant op nul gezet. Het verschil wordt heel goed uitgelegd in deze wikipedia-pagina .

Vervolgens moet je de rijen groeperen met dezelfde inzendings-ID en tellen hoeveel rijen er zijn gegroepeerd, waarbij je ervoor zorgt dat als een inzending slechts één opmerking heeft en een andere geen, ze allebei 1 gegroepeerde rij hebben... Als een inzending geen opmerkingen heeft , in de volgende zoekopdracht c.submissionid zal null zijn, dus

Uw SQL zou kunnen zijn

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

Er kunnen fouten zijn, ik heb de query niet getest... Maar ik hoop je het juiste idee te hebben gegeven, dat is het verschil tussen outer joins en inner joins.



  1. Retourneer het basisgegevenstype van een SQL_Variantwaarde in SQL Server

  2. MySQL - Waarde aftrekken van de vorige rij, groeperen op

  3. #1075 - Onjuiste tabeldefinitie; er kan maar één autokolom zijn en deze moet als een sleutel worden gedefinieerd

  4. Hulp nodig bij het begrijpen van Magento-productverzamelingsobjecten en het catalogus-/productmodel