iT邦幫忙

0

想問怎麼在select的時候在特定欄位有結果的狀況下用該欄位繼續select

sql
  • 分享至 

  • xImage

是這樣的 我需要一個類似這樣的sql
table 有欄位 id id2

select * from table where id = 0

出來結果若id2 != null
繼續 select * from table where id = id2

直到 select的id2欄位=null 輸出剛剛全部的搜尋結果

id id2
1 |8
8 |10
10 |null

像這樣的結果
初次發問 希望這樣描述夠清楚 謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
w4560000
iT邦研究生 5 級 ‧ 2022-07-28 13:56:15
最佳解答

這樣是你要的輸出方式嗎?

CREATE TABLE #Test (id int, id2 int)

INSERT #Test
SELECT 0, 1 UNION
SELECT 1, 8 UNION
SELECT 8, 10 UNION
SELECT 10, NULL UNION
SELECT 11, 5

;WITH CTE(id, id2) AS   
(  
	-- 第一層
    SELECT id, id2
    FROM #Test
	WHERE id = 0
    UNION ALL
	-- 遞迴CTE
    SELECT t2.id, t2.id2
    FROM #Test AS t2
    INNER JOIN CTE cte
    ON t2.id = cte.id2
)  
SELECT *   
FROM CTE


DROP TABLE #Test

http://sqlfiddle.com/#!18/219ce/2

davil004 iT邦新手 5 級 ‧ 2022-07-28 14:02:25 檢舉

對!! 這是我要的 太感謝了

柳丁柚 iT邦新手 1 級 ‧ 2022-07-28 16:43:54 檢舉

受教了

0
qazaq54321
iT邦新手 5 級 ‧ 2022-07-28 11:36:45

關於搜尋後繼續搜尋的部分,可以參考這裡
但我不大懂你要搜尋id=0,然後條件給的是id2!=null的意思,或許是我笨,就留著給其他高手解答

看更多先前的回應...收起先前的回應...
davil004 iT邦新手 5 級 ‧ 2022-07-28 11:48:32 檢舉

這樣說可能比較清楚
table 有2個欄位 id id2

select * from table where id = 0
出來結果 id=0 id2=3(打個比方
那就繼續做
select * from table where id = 3

直到select出來id2欄位是null為止 再把剛剛全部的select結果送出來

柳丁柚 iT邦新手 1 級 ‧ 2022-07-28 13:47:23 檢舉

同問
可是你id!=0也繼續做啊?

davil004 iT邦新手 5 級 ‧ 2022-07-28 13:53:59 檢舉

id=多少不是問題 重點是id2的欄位會成為下次select的時候id要找的數字
只要id2欄位是null才停下來
之後輸出全部select得到的資料

柳丁柚 iT邦新手 1 級 ‧ 2022-07-28 16:43:45 檢舉

原來

0
allenlwh
iT邦高手 1 級 ‧ 2022-07-28 12:40:55
CREATE TABLE [dbo].[myTable](
	[id] [nvarchar](5) NULL,
	[id2] [nvarchar](5) NULL
) ON [PRIMARY]
GO

insert myTable values (1,8)
insert myTable values (8,10)
insert myTable values (10,NULL)
insert myTable values (9,8)
declare @id nvarchar(5)
set @id='1'
while (@id<>'')
begin
	select @id=isnull(id2,'') from myTable where id=@id
	if (@id<>'')
		select @id as result
end

https://ithelp.ithome.com.tw/upload/images/20220728/20033493CzO4k6npSH.jpg

davil004 iT邦新手 5 級 ‧ 2022-07-28 13:48:37 檢舉

我希望最後輸出會是合併起來像這樣的資料呢?
|id|id2
1|1 |8
2|8 |10
3|10 |null

allenlwh iT邦高手 1 級 ‧ 2022-07-28 14:55:17 檢舉
declare @id nvarchar(5),@oldid nvarchar(5),@cnt int
set @oldid='1'
set @cnt=1
while (@oldid<>'')
begin
	select @id=isnull(id2,'') from myTable where id=@oldid
	select convert(varchar,@cnt)+'|'+@oldid+'|'+(case when @id='' then 'NULL' else @id end) as result

	set @oldid=@id
	set @cnt=@cnt+1
end

我要發表回答

立即登入回答