根据另一列检索列的值

3
从这个足球运动员的表格中,你要如何选择出球员名字和他们队长的名字?
PlayerID | PlayerName | TeamCaptainID
=====================================
1        | Jay        | 5
2        | John       | 3
3        | James      | 3
4        | Jack       | 5
5        | Jeremy     | 5

我需要的结果是:
Player | Captain
================
Jay    | Jeremy
John   | James
James  | James
Jack   | Jeremy
Jeremy | Jeremy
2个回答

6
在同一张表上使用“inner join”似乎已经足够了:
select t1.PlayerName as Player
     , t2.PlayerName as Captain
from tbl t1 
join tbl t2 on t1.TeamCaptainID = t2.PlayerID

谢谢。你做得很好。我也采用了你的解决方案(使用 outer join 而不是 inner join)以包括空行。 - Mihai Nagy

1
为了找到您想要的确切结果,您必须使用自连接,以下是其工作原理:
为了实现所需结果,我们将两次使用同一个表,并为此使用表的别名。自连接必须有别名。
要获取球员及其队长的列表,可以使用以下 SQL 语句:
SELECT a.PlayerName AS "Player",  
b.TeamCaptainID AS "Captain"
FROM team a, team b  
WHERE a.TeamCaptainID=b.PlayerName

我不会对此进行负面评价,但其他人可能会,因为虽然SQL Server支持该联接语法,但强烈不建议使用。如果没有where子句,您可能会意外地进行交叉连接,而且该语法对于联接的信息很少。在涉及多个联接时,情况会变得更加复杂。更多讨论请参见:https://dev59.com/u3I-5IYBdhLWcg3w8dYQ - Stephan
1
@Stephan:谢谢,我刚刚试图解决他的问题,是的,你说得对,当涉及到多个连接时会变得复杂,必须在这种情况下避免。 - Vivek Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接