Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como faço para JOIN uma terceira tabela na minha instrução SQL que retorna um COUNT sem perder os itens de contagem 0?

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

Isso é contraditório. Você está dizendo que é uma junção à esquerda, então o registro MEDICALTESTS não precisa existir, mas então dizendo que o registro deve de fato existir e ter um 1 como PassedMedical. Portanto, sua junção esquerda se torna uma junção interna de fato, e da mesma forma, como você deve ter uma linha MEDICALTESTS, você também deve ter uma linha PLAYERS, para que também se torne uma junção interna.

Tente isso em vez disso:
INNER JOIN MEDICALTESTS m ON p.PlayerId = m.PlayerId and m.PassedMedical = 1

Não tenho certeza de como o SQL Server interpreta FROM foo LEFT JOIN bar INNER JOIN baz...você quer que ele interprete isso como FROM foo LEFT JOIN (bar INNER JOIN baz). Se isso não funcionar, use uma subseleção; não participe, apenas adicione:
WHERE p.PlayerId IS NULL or (select PassedMedical from MEDICALTESTS m where m.PlayerId=p.PlayerID) = 1 

Espero que isso ajude, apesar da minha falta de familiaridade com o SQL Server.