ERD只是爲了輕鬆vizualise:鏈接來自關聯實體的具有共同ID的所有ID
從表位置的「位置」可以通過關聯實體「鏈接位置」
進行相互鏈接假設有看起來像這樣的一些當前鏈接:
location_id_1 location_id_2 active
1 5 True
5 3 True
2 6 True
4 6 True
6 7 True
我想寫一個查詢,將返回一個列中包含可能相互連接的所有ID,即使通過一個或多個鏈接移除/距離也是如此。所以,1與5連接,3與5連接。由於5的公共ID,因此1與3一起被移除。
因此,在我的查詢中,我希望能夠決定「黃金位置」,如果您願意,然後它將返回連接到我的黃金位置的所有位置ID,直接或者刪除一次或兩次或n次。
我可以很容易地做到這一點與可能發生的第一級鏈接(請參閱下面的查詢),但一旦我介紹二級或三級鏈接,我很難看到另一種方式,而不是手動更新我的查詢,以允許另一種程度的聯繫。
declare @PrimeLocation int
set @PrimeLocation = 1
Select location_id_1
from [Link Location]
where location_id_1 = @PrimeLocation
or location_id_2 = @PrimeLocation
union
Select location_id_2
from [Link Location]
where location_id_1 = @PrimeLocation
or location_id_2 = @PrimeLocation
該查詢顯然只返回「1」和「5」。但是我怎樣才能讓它返回「3」以及其他ID,我是否應該在未來添加另一個鏈接到3,然後可能會從1中刪除兩次?我可以做到這一點,而不必每次都添加到我的查詢中嗎?
所以,如果我的 「素位置」= 1(或3或5)我的結果集應該是:
location_id
1
3
5
如果我的 「黃金地段」 爲2(或4或6或7)我的結果集應該是:
location_id
2
4
6
7
在此先感謝。
這看起來像一個遞歸CTE將是必要的,我相當肯定這個問題幾乎相同的版本是在過去幾個月發佈;您可能需要花點時間嘗試一些不同的搜索關鍵字,看看您是否可以找到它。 –
[This](http://stackoverflow.com/a/15081353/92546)答案演示了一種通過遞歸漫遊關係,同時避免無限循環的方式。訣竅是跟蹤你去過的地方並終止這些遞歸。 – HABO