我有一些數據,看起來像這樣:在層次結構遞歸查詢和同行
CREATE TABLE relations (
group_member_id int not null,
group_boss_id int not null);
INSERT INTO relations (group_member_id, group_boss_id)
VALUES (19, 21), (21, 21), (19, 20), (20, 20), (21, 22), (22, 22);
的基本思路是,一組成員可能在各種不同的老闆各種不同羣體(如19是兩組,分別帶有凸臺21和20)。小組成員可能是他自己的老闆(例如,20是20的老闆)。
隱含地,如果這些成員共享相同的老闆,則組成員與另一組成員在同一組中。因此,19和21在同一組中,因爲他們共享21作爲老闆,19和20在同一組中,因爲他們共享20作爲老闆,並且21和22在同一組中,因爲他們共享22作爲老闆。
對於每個組成員,我想找到最大老闆ID,不僅老闆標識明確地聯繫到該組成員,但依賴於該成員的其他隱性組成員的所有老闆的ID,和他們的小組會員等。我想要達到的最終輸出是:
group_member_id | largest_boss_id
19 22
20 22
21 22
22 22
我已經試過了編碼這種非遞歸沒有多少運氣:我在的主要問題是以下20至21之間的關係,然後從21到22,並在每一步收集同齡組成員。
既然你正在尋找的「最大老闆ID」,做思想有一定的意義呢?特別是,'group_member_id <= group_boss_id'總是正確的?此外,由於您正在使用臨時表,您是否可以發佈此信息的來源 - 在該結構上可能會有更高效的解決方案。 – Patrick
@Patrick是的,group_member_id將始終爲<= group_boss_id。我正在咀嚼的實際問題是重複數據刪除問題:每個「group_member_id」是某行的ID,「largest_boss_id」是該行的暫定重複數據刪除版本的ID。我真的試圖確定行19,20,21和22都是同一行的真正副本,因此應該全部映射到第22行,因爲它們全都在同一鏈中鏈接到「老闆」 22. –