2015-04-27 37 views
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 

回答

6

在同一台应用inner join似乎是不够的:

select t1.PlayerName as Player 
    , t2.PlayerName as Captain 
from tbl t1 
join tbl t2 on t1.TeamCaptainID = t2.PlayerID 
+0

谢谢。你已经钉住了它。我也调整了你的解决方案('outer join'而不是'inner'')来包含空行。 –

1

要找到你想要的精确结果,你有要使用自连接,这是如何工作的:

为了达到预期的效果,我们将使用sa我表两次,为了做到这一点,我们将使用表的别名,自连接必须有别名。

为了让下面的SQL语句可以用于球员和他们的队长名单:

SELECT a.PlayerName AS "Player", 
b.TeamCaptainID AS "Captain" 
FROM team a, team b 
WHERE a.TeamCaptainID=b.PlayerName 
+0

我不会低估这一点,但其他人可能会这样做,因为尽管SQL Server支持该连接语法,但它极不鼓励。如果没有where子句,你可能会做一个意外的交叉连接,并且这个语法告诉你一点关于连接的信息。而且它会因多个连接而变得复杂。 更多讨论在这里:http://stackoverflow.com/questions/1599050/ansi-vs-non-ansi-sql-join-syntax – Stephan

+1

@Stephan:谢谢,我只是试图解决他的问题,是的你是对的它会因多个连接而变得复杂,并且在出现这种情况时必须避免。 –

相关问题