【发布时间】:2009-08-14 08:26:56
【问题描述】:
给定以下表格:
CREATE TABLE tree (
id serial NOT NULL,
name character varying NOT NULL,
type integer,
lft integer NOT NULL,
rgt integer NOT NULL )
CREATE TABLE item (
id serial NOT NULL,
name character varying NOT NULL,
tree_id integer
CONSTRAINT fk_tree FOREIGN KEY (tree_id) REFERENCES tree (id) )
表 tree 上的列 lft 和 rgt 使用修改后的前序树遍历 (MPTT) 算法填充。
是否可以在 single 查询中获取所有附加到 type=x 的树节点的项目及其所有后代?
通常,我会在两个单独的查询中这样做:
SELECT lft, rgt FROM tree WHERE type = x;
/* assume it returns two rows: ((10, 20), (27, 30)) */
SELECT item.id, item.name FROM item JOIN tree ON (tree_id = tree.id)
WHERE ((lft >= 10 AND rgt <= 20) OR (lft >= 27 AND rgt <= 30);
关键是我只能执行一条 SQL 语句(在 PostgreSQL 数据库中,如果重要的话)。你能用某种子查询来做到这一点吗?
感谢任何提示。
【问题讨论】:
标签: sql postgresql