2015-04-27 3 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

Спасибо. Вы прибили его. Я также адаптировал ваше решение ('external join' вместо' inner' one) для включения пустых строк. –

1

Чтобы найти точный результат вы хотите, у вас есть для использования самоподготовки, как это будет работать:

Для достижения желаемого результата мы будем использовать sa me table дважды, и для этого мы будем использовать псевдоним таблицы, самосоединение должно иметь псевдонимы.

Чтобы получить список игроков и их капитан следующее заявление 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: Спасибо, я просто попытался решить его проблему, и да, вы правы он становится сложным с несколькими объединениями, и нужно избегать возникновения такой ситуации. –