加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

我可以在T-SQL数据库中进行递归SELECT

发布时间:2020-12-12 07:44:44 所属栏目:MsSql教程 来源:网络整理
导读:我不确定在SQL Server的数据库中是否可以这样做? 说,我有一张桌子: id INTnm NVARCHAR(256)cid INT --references [id] 和假设数据: id nm cid1 Name 1 02 Name 2 03 Name 3 14 Name 4 35 Name 5 26 Name 6 47 Name 7 2 选择的逻辑应如下: 说,我们有原始ID
我不确定在SQL Server的数据库中是否可以这样做?

说,我有一张桌子:

id INT
nm NVARCHAR(256)
cid INT --references [id]

和假设数据:

id   nm       cid
1    Name 1   0
2    Name 2   0
3    Name 3   1
4    Name 4   3
5    Name 5   2
6    Name 6   4
7    Name 7   2

选择的逻辑应如下:

>说,我们有原始ID,我们称之为N.
>然后我们有一个查找ID,我们称之为X.然后我们这样做:

SELECT [cid] FROM [TableName] WHERE [id]=X

并检查结果是否等于N.如果是,则返回该记录的[nm].如果结果为0,那么我们返回Null.如果结果是别的我们做同样的选择,除了X现在是结果值.

我显然可以用C#来做这件事,但我很好奇是否有可能在纯SQL语句中结束?

PS.只是用上面的表格来说明这一点,如果N是1而X是6,那么我们得到:

SELECT [cid] FROM [TableName] WHERE [id]=6    --results is 4 (not N or 0,then continue)
SELECT [cid] FROM [TableName] WHERE [id]=4    --results is 3 (not N or 0,then continue)
SELECT [cid] FROM [TableName] WHERE [id]=3    --results is 1 (is N,then return "Name 1")

或者如果N是1且X是7,我们得到:

SELECT [cid] FROM [TableName] WHERE [id]=7    --results is 2 (not N or 0,then continue)
SELECT [cid] FROM [TableName] WHERE [id]=2    --results is 0 (is 0,then return Null)

编辑:
我需要在SQL Server 2008下运行它.

解决方法

递归CTE可以做到这一点.它看起来像这样:
WITH q AS (
    SELECT t.id,t.name,t.cid
    FROM t
    WHERE t.id = @x
    UNION ALL
    SELECT t.id,t.cid
    FROM q
    INNER JOIN t
    ON t.id = q.cid
)
SELECT name
FROM q
WHERE id = @n

我们的想法是,CTE可以在UNION ALL子句的第二部分中引用自身,并且它将评估第二部分,直到它不再生成结果或达到内部限制.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读