sql - 递归查询不正确?

标签 sql sql-server-2008 t-sql

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

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')

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

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

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

不是找人帮我做作业,只是想朝着正确的方向前进。

TIA

最佳答案

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

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

关于sql - 递归查询不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18509035/

相关文章:

sql - Django 原始 SQL 查询 - 循环结果,它为每次迭代执行查询

c# - 在 SQL Server Management Studio 中创建一个新的菜单项

SQL 服务器 : How to update table based on subquery in where clause?

sql-server-2008 - SQL Server 如何添加超过 1024 列

sql-server-2008 - 如何在同一查询中引用另一列中的聚合列?

sql-server - 如何在不删除依赖项的情况下更改数据类型

SQL:使用冗余联合代码优化嵌套查询?

sql - 非常复杂的 (Postgre/My)SQL 示例?

sql - 如何在 MS SQL 中进行限制和排序?

sql - 使用 Rails 在 Postgres 中开发自定义函数