1
在這裏,我有一個標準的分級表:如何在遞歸CTE中做一個UNION?
CREATE TABLE GroupMembers (
group_id VARCHAR,
member_id VARCHAR
);
INSERT INTO GroupMembers VALUES
('1', '10'),
('1', '11'),
('10','100'),
('10','101'),
('20','200'),
('20','201');
我們獲得小組的所有成員 '1' 我做的:
WITH RECURSIVE members(id) AS (
VALUES('1')
UNION
SELECT gm.member_id
FROM GroupMembers gm
INNER JOIN members m ON gm.group_id=m.id
)
SELECT * FROM members;
其中產量: '1', '10','11 ','100','101'。
現在,一個新皺紋:我對IDS
CREATE TABLE Aliases (
member_id VARCHAR,
alias_id VARCHAR
);
INSERT INTO Aliases(member_id, alias_id) VALUES
('11', '20');
現在我希望得到所有成員的別名。由於'11'是'20'的別名,因此結果應該是:'1','10','11','100','101','200'和'201'。
我嘗試以下查詢:
WITH RECURSIVE members(id) AS (
VALUES('1')
UNION
SELECT gm.member_id
FROM GroupMembers gm
INNER JOIN members m ON gm.group_id=m.id
UNION
SELECT a.alias_id
FROM Aliases
INNER JOIN members m ON gm.group_id=m.id
)
SELECT * FROM members;
,但我得到的錯誤circular reference: members
注意:使用遞歸cte(「IN NER JOIN成員「)必須在子查詢的外部進行,以避免」子查詢中的遞歸引用「錯誤。 –
'INNER JOIN members'在外面。 groupWithAliases子查詢中有一個UNION,但它不使用成員CTE,所以它應該可以正常工作。不幸的是,SQL小提琴目前並不適合我,所以我無法測試它 – cha
對不起,我打算將它作爲基於我遇到的內容的額外註釋註釋,而不是對您的示例提出的修改。 –