我想寫一個導入工具將我的數據庫從一個模式轉換爲另一個模式。以連續的方式查詢親子關係
所以現在我遇到了一個使用父子關係的表格(通過PK ID
FK ParentID
),我想連續選擇所有記錄。
我的查詢的風險是,我可能會嘗試導入其父元素尚未導入的子元素。這將導致不會導入的記錄集,因此需要避免。
我查詢我工作的是如下:
SELECT * FROM Table a INNER JOIN Table b ON (b.ParentID=a.ID and a.ID= b.ParentID)
遺憾的是不工作(它不給我表中的所有記錄),所以我需要一個查詢,讓我列表中的所有行,按子元素和父元素排序,我可以循環導入。
有人可以指導我的方式嗎?
查詢中的'和'子句不是必須的,因爲它們在兩種情況下都是相同的。但是在這種情況下,我可能會首先導入所有的「父」記錄,然後是所有的「子」記錄,所以像'import into TableB select * from Table where ParentID is null' then'import into TableB select *從表中ParentID不爲空的表。 – beercodebeer
我也想過類似的東西。但是,這是行不通的,因爲繼承深度大於1.所以一個子元素可能是另一個子元素的父元素。 – SeToY
但是必須有一些絕對父元素,不是嗎?元素不是自己的孩子?如果是這種情況,那麼你仍然可以運行第一個查詢,然後重複執行如下所示的操作,直到獲得所有記錄:'Insert into TableB select * from Table where ParentID is not null and exists(select 1 from TableB where ID = Table.ParentID)' – beercodebeer