我使用的是 Postgres 15.1,有一个node
表格如下:
CREATE TABLE node (
id TEXT PRIMARY KEY,
is_skippable BOOL,
prev TEXT REFERENCES node(id),
"next" TEXT REFERENCES node(id)
);
该表表示一系列双向链表,但在某些情况下,对于某些查询,我想从is_skippable
列表中删除节点并链接它们周围。
例如,如果我在数据库中植入了以下数据,其中有一个链接列表A1 <-> A2 <-> A3
(可A2
跳过)和其中之一B1 <-> B2
:
INSERT INTO node VALUES
('A1', FALSE, NULL, 'A2'),
('A2', TRUE, 'A1', 'A3'),
('A3', FALSE, 'A2', NULL),
('B1', FALSE, NULL, 'B2'),
('B2', FALSE, 'B1', NULL);
对于某些查询,我想链接is_skippable
节点。因此,如果我查询这个完整的表,我要查找的结果集是:
ID | 上一页 | 下一个 |
---|---|---|
A1 | 无效的 | A3 |
A3 | A1 | 无效的 |
B1 | 无效的 | B2 |
B2 | B1 | 无效的 |
请注意,A2
不在结果集中,并且A2
的指针已被重写到其之前和之后的节点。
在 Postgres 中是否有一种得到良好支持的方法来做到这一点?我在 StackOverflow 上的其他地方看到了简单链表的答案(例如postgresql 中的链表概念),但它们不需要重写指针。谢谢!
示例小提琴:https: //dbfiddle.uk/4lB4TAtF。