Tsql 如何选择一个表中的所有行以及另一个表中的任何匹配项(如果存在)?
我有一个数据库,包含2个表、团队和玩家:Tsql 如何选择一个表中的所有行以及另一个表中的任何匹配项(如果存在)?,tsql,select,case,Tsql,Select,Case,我有一个数据库,包含2个表、团队和玩家: Teams: TeamID | TeamName ------------------ |1 | Team A | |2 | Team B | |3 | Team C | ------------------ Players: PlayerID | Name | TeamID | Position ---------------------------------------
Teams:
TeamID | TeamName
------------------
|1 | Team A |
|2 | Team B |
|3 | Team C |
------------------
Players:
PlayerID | Name | TeamID | Position
------------------------------------------
|1 | Anthony J | 1 | Guard |
|2 | Sam K | 2 | Guard |
|3 | Jack P | 2 | Forward |
|4 | Carlos B | 2 | Forward |
------------------------------------------
我希望为数据库中所有球队的名字选择一列,不管他们是否有球员。如果其位置为“前进”,则下一列应显示其名称,否则为空。球队中的每个“前锋”球员都应该有一排
我用于获取此数据的查询是:
SELECT T.TeamName,
CASE WHEN P.Position = 'Forward'
THEN P.Name
END as ForwardPlayer
FROM Teams T
LEFT JOIN Players P on T.TeamID = P.TeamID
我需要的所有数据都驻留在此数据集中,但对于具有转发的团队,有一行为NULL,即:
TeamName | ForwardPlayer
-------------------------
|Team A | NULL |
|Team B | Jack B |
|Team B | Carlos B |
|Team B | NULL |
|Team C | NULL |
我意识到第四排的存在是因为球队中有一名球员不符合案例条件,所以结果为空
在外部查询中加入where子句,将数据集限制为“前锋”球员,将忽略没有任何前锋球员的所有球队。我需要所有团队的名字都出现在数据集中
仅当每个团队有1个前卫时,使用嵌套选择来获取此选项才有效
对于有符合此条件的球员的球队,有没有办法省略这些空行?不做
案例
。您只需要直接将玩家限制为仅向前的玩家,然后执行加入
:
SELECT T.TeamName, P.Name
FROM Teams T
LEFT JOIN Players P ON T.TeamID = P.TeamID
AND P.Position = 'Forward'
杰出的我知道要让它工作起来不会特别复杂。非常感谢,这正是我所需要的。