【发布时间】:2012-03-16 12:24:57
【问题描述】:
我不确定在 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 下运行。
【问题讨论】:
-
您的 DBMS 是什么? SQL Server、Oracle 还是其他?
-
SQL Server 的哪个版本?这可以通过递归 CTE(公用表表达式)实现,但我不知道它们是否适用于您的版本。
-
@hvd 我使用的是 SQL Server 2008
标签: sql sql-server sql-server-2008 tsql recursion