Re: [SQL ] 遞迴查詢

看板Database作者 (可愛小孩子)時間6年前 (2018/03/27 17:24), 6年前編輯推噓2(209)
留言11則, 2人參與, 6年前最新討論串2/2 (看更多)
########### # test data create table tmp ( UID int, marID int ); insert into tmp select 1, null; insert into tmp select 2, 1; insert into tmp select 3, 1; insert into tmp select 4, 2; insert into tmp select 5, 7; insert into tmp select 6, 4; insert into tmp select 7, null; ################ # Google 關鍵字: # # How to create a MySQL hierarchical recursive query select UID,marID from ( select * from tmp order by marID ) t1, ( select @pv := 1 ) t2 where find_in_set(marID, @pv) and length(@pv := concat(@pv, ',', UID)) ※ 引述《bill0205 (ZzZz)》之銘言: : (針對 SQL 語言的問題,用這個標題。請用 Ctrl+Y 砍掉這行) : 資料庫名稱: MySQL : 資料庫版本: 5.7 : 內容/問題描述: : 我有一張table(users) 欄位分別為 UID (PK) , marID(FK,users.UID) : 我想做遞迴查詢 : 假設有資料為 : UID marID : 1 NULL : 2 1 : 3 1 : 4 2 : 5 7 : 6 4 : 7 NULL : 我有找到相關方法 : with tmpTB ( ... union all ... ) select * from tmpTB;... : 但是還是失敗 : 我想做的是能否利用一個UID 就能找到所有部屬 : ex UID = 1 : 則會查到 : UID marID : 2 1 : 3 1 : 4 2 : 6 4 : 不知道有沒有類似方法呢 感謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.221.80.36 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1522142679.A.898.html

03/28 10:46, 6年前 , 1F
感謝 剛剛我測試了一下 似乎理解了裡面的意義
03/28 10:46, 1F

03/28 11:11, 6年前 , 2F
但剛剛發現一個問題 假設是先insert 4 , 2 再 insert
03/28 11:11, 2F

03/28 11:11, 6年前 , 3F
2,1 則 4,2這筆會找不到
03/28 11:11, 3F

03/28 13:03, 6年前 , 4F
如果 UID ↔marID 有 order(降冪、升冪)關係的話,就有解
03/28 13:03, 4F

03/28 13:03, 6年前 , 5F
如果沒有,例如:
03/28 13:03, 5F

03/28 13:04, 6年前 , 6F
2,null
03/28 13:04, 6F

03/28 13:04, 6年前 , 7F
1,2
03/28 13:04, 7F

03/28 13:11, 6年前 , 8F
3,1
03/28 13:11, 8F

03/28 13:11, 6年前 , 9F
4,3
03/28 13:11, 9F

03/28 13:11, 6年前 , 10F
假設 UID 從 2 開始,就無法用這篇的方法解了
03/28 13:11, 10F
※ 編輯: cutekid (1.168.27.75), 03/28/2018 13:12:12

03/28 15:26, 6年前 , 11F
感謝 ^^
03/28 15:26, 11F
文章代碼(AID): #1QkWtNYO (Database)
文章代碼(AID): #1QkWtNYO (Database)