sql >> Database teknologi >  >> RDS >> Mysql

Brug af en joinforbindelse med tre tabeller, når et felt kan være null

Du laver en INNER JOIN, men du har brug for en YDER JOIN, især en LEFT JOIN. Med en LEFT JOIN er tabellen "til venstre" altid sammenføjet, og hvis der ikke er korrespondance, er felterne i tabellen til højre sat til null. Forskellen er forklaret meget godt på denne wikipedia-side .

Derefter skal du gruppere rækkerne med det samme indsendelses-id og tælle, hvor mange rækker der er blevet grupperet, idet du skal passe på, at hvis en indsendelse kun har én kommentar, og en anden ikke har nogen, har de begge 1 grupperet række... Hvis en indsendelse ikke har nogen kommentarer , i den næste forespørgsel c.submissionid vil være nul, så

Din SQL kunne være

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

Der kan være fejl, jeg har ikke testet forespørgslen... Men jeg håber at have givet dig den rigtige idé, det er forskellen mellem ydre sammenføjninger og indre sammenføjninger.



  1. Deaktivering af PDO::ATTR_EMULATE_PREPARES forårsager et "ukendt" problem

  2. Brug af JShell i Java 9 i NetBeans 9.0, del 2

  3. sql grupper efter kun rækker, der er i rækkefølge

  4. SQL for at returnere felt med ikke-numeriske tegn fjernet i MySQL