递归查询不正确?

时间:2013-08-29 10:54:18

标签: sql sql-server-2008 tsql

也许我有这个错误,但我认为这个查询会使用递归但是我似乎无法正确编写它。以下是示例数据:

DECLARE @Friends TABLE
(
[person_id] [int] NOT NULL,
[first_name] [varchar](50) NOT NULL,
[favorite_color] [varchar](50) NOT NULL,
[best_friend] [varchar](50) NOT NULL
)

INSERT @Friends VALUES (1, 'John', 'blue', 'Mark')
INSERT @Friends VALUES (2, 'Mark', 'green', 'Sally')
INSERT @Friends VALUES (3, 'David', 'purple', 'John')
INSERT @Friends VALUES (4, 'Sally', 'red', 'Rose')
INSERT @Friends VALUES (5, 'Stephanie', 'blue', 'Rose')
INSERT @Friends VALUES (6, 'Rose', 'yellow', 'David')

现在我需要在第一列中列出每个人的姓名,然后在第二列中列出他们最喜欢的朋友的颜色。

我的想法是使用cte,初始化查询将获得名称列表,递归将获得他们最好的朋友颜色。

但是现在我不确定如何编写递归部分以找到最好的朋友颜色?

不想让任何人做我的功课,只是想朝着正确的方向前进。

TIA

1 个答案:

答案 0 :(得分:4)

您不需要递归,也不需要子查询。您只需要简单的加入:

SELECT f.*, bf.favorite_color AS BF_favorite_color
FROM @Friends f
LEFT JOIN @Friends bf ON f.best_friend = bf.first_name

<强> SQLFiddle DEMO