sql >> Databasteknik >  >> RDS >> Sqlserver

Hur ansluter jag mig till en tredje tabell i min SQL-sats som returnerar ett COUNT utan att förlora 0-posterna?

LEFT JOIN MEDICALTESTS m ON p.PlayerId = m.PlayerId
WHERE m.PassedMedical = 1

Det är motsägelsefullt. Du säger att det är en vänsteranslutning, så MEDICALTESTS-posten behöver inte existera, men då säger du att posten faktiskt måste finnas och ha en 1 som PassedMedical. Så din vänstra koppling blir faktiskt en inre koppling, och på samma sätt, eftersom du måste ha en MEDICALTESTS-rad, måste du också ha en PLAYERS-rad, så det blir också en inre koppling.

Prova detta istället:

INNER JOIN MEDICALTESTS m ON p.PlayerId = m.PlayerId and m.PassedMedical = 1

Osäker på hur SQL-servern tolkar FROM foo LEFT JOIN bar INNER JOIN baz...du vill att den ska tolka det som FROM foo LEFT JOIN (bar INNER JOIN baz). Om det inte fungerar, använd ett underval istället; gå inte med, lägg bara till:

WHERE p.PlayerId IS NULL or (select PassedMedical from MEDICALTESTS m where m.PlayerId=p.PlayerID) = 1 

Hoppas detta hjälper trots min bristande förtrogenhet med SQL Server.



  1. Vad är motsvarande PostgreSQL-syntax till Oracles CONNECT BY ... BÖRJA MED?

  2. Skriv en MySQL-fråga för att få önskat resultat

  3. PL/MySQL finns det?

  4. Varför tillåter MySQL explicit predikatlåsning inte INSERT-satser utanför predikatlåset