Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie verbinde ich eine dritte Tabelle in meiner SQL-Anweisung, die eine COUNT zurückgibt, ohne die 0-Count-Elemente zu verlieren?

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

Das ist widersprüchlich. Sie sagen, dass es sich um eine linke Verknüpfung handelt, sodass der MEDICALTESTS-Datensatz nicht existieren muss, aber dann sagen Sie, dass der Datensatz tatsächlich existieren und eine 1 als PassedMedical haben muss. Ihr linker Join wird also tatsächlich zu einem inneren Join, und ebenso müssen Sie, da Sie eine MEDICALTESTS-Zeile haben müssen, auch eine PLAYERS-Zeile haben, damit dies ebenfalls ein innerer Join wird.

Versuchen Sie stattdessen Folgendes:

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

Nicht sicher, wie SQL Server FROM foo LEFT JOIN bar INNER JOIN baz interpretiert ... Sie möchten, dass es das als FROM foo LEFT JOIN (bar INNER JOIN baz) interpretiert. Wenn das nicht funktioniert, verwenden Sie stattdessen eine Unterauswahl; nicht beitreten, nur hinzufügen:

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

Hoffe, das hilft trotz meiner mangelnden Vertrautheit mit SQL Server.