我可以在T-SQL数据库中进行递归SELECT
发布时间:2020-05-24 00:18:29 所属栏目: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 N
|
我不确定在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. 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) 编辑: 解决方法递归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子句的第二部分中引用自身,并且它将评估第二部分,直到它不再生成结果或达到内部限制. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – MS SQL Server中的数百个休眠进程会降低性能
- sql-server – 我可以依赖读取SQL Server Identity值吗?
- 奇数SQL Server(TSQL)查询在“WHERE”子句中使用NEWID()
- Redis教程(十):持久化详解
- sql-server – 无法在SQL Server 2012上运行的T-SQL CTE实现
- tsql – SQL Server 2000传输登录和关联的服务器角色并访问
- mybaits非配置原因,导致SqlSession was not registered fo
- 数据库 – “日期”作为列名称
- SQL Server中通配符的使用示例
- 数据库集群和数据库分区之间有什么不同
推荐文章
站长推荐
热点阅读
