我不確定SQL Server數據庫中是否可以這樣做?我可以在T-SQL數據庫中執行遞歸SELECT操作嗎
說,我有一個表:
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
而且可供選擇的邏輯應該如下:
說,我們有原始編號,我們稱它爲N.
然後我們有一個查找ID,我們稱之爲X.然後我們做:
SELECT [cid] FROM [TableName] WHERE [id]=X
,並檢查結果是否等於N.如果是,那麼我們回到[納米]該記錄。如果結果爲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或其他? – 2012-02-26 23:00:27
哪個版本的SQL Server?這可以通過遞歸CTE(公用表表達式)來實現,但我不知道它們是否適用於您的版本。 – hvd 2012-02-26 23:00:32
@ hvd我正在使用SQL Server 2008 – ahmd0 2012-02-26 23:01:40