【发布时间】:2020-06-24 10:00:11
【问题描述】:
我对此很接近,但缺少一些东西。如何仅获取 A->B、B->C 等链中的第一个和最后一个链接?我如何才能得到 A->C?
CREATE TEMP TABLE IF NOT EXISTS chains (
cname TEXT PRIMARY KEY,
becomes TEXT
);
INSERT INTO chains
VALUES
('A', NULL),
('B', 'C'),
('C', 'D'),
('D', 'E'),
('E', NULL)
;
WITH RECURSIVE
final_link AS (
SELECT
chains.cname,
chains.becomes
FROM
chains
UNION
SELECT
chains.cname,
final_link.becomes
FROM
chains
INNER JOIN final_link
ON chains.becomes = final_link.cname
)
SELECT * FROM final_link;
我想要的结果是:
cname | becomes
------|--------
'B' | 'E'
'C' | 'E'
'D' | 'E'
【问题讨论】:
-
在您的示例
chains中,第一个链接是B->C,最后一个链接是D->E,而不是A->B和B->C? -
@Bergi。也许我说得不好。我想要 B->E。我不想要任何中间步骤。然后我想要 C->E 没有任何中间步骤。
-
啊,整个链条,不是一个特定的环节,我明白了。
标签: sql postgresql select common-table-expression recursive-query