Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment JOINDRE une troisième table dans mon instruction SQL qui renvoie un COUNT sans perdre les éléments de comptage 0 ?

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

C'est contradictoire. Vous dites qu'il s'agit d'une jointure gauche, de sorte que l'enregistrement MEDICALTESTS n'a pas besoin d'exister, mais que l'enregistrement doit en fait exister et avoir un 1 comme PassedMedical. Ainsi, votre jointure gauche devient en fait une jointure interne, et de même, puisque vous devez avoir une ligne MEDICALTESTS, vous devez également avoir une ligne PLAYERS, de sorte que cela devient également une jointure interne.

Essayez ceci à la place :

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

Vous ne savez pas comment le serveur SQL interprète FROM foo LEFT JOIN bar INNER JOIN baz ... vous voulez qu'il interprète cela comme FROM foo LEFT JOIN (bar INNER JOIN baz). Si cela ne fonctionne pas, utilisez une sous-sélection à la place; ne rejoignez pas, ajoutez simplement :

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

J'espère que cela vous aidera malgré mon manque de familiarité avec SQL Server.