【发布时间】:2009-09-28 10:04:24
【问题描述】:
我有一个表,其中包含以下方式相关的记录:
父母,孩子,孙子。
我希望能够运行查询以执行以下操作:
- 检索所有记录 来自特定记录
- 检索所有直接的记录 特定记录的孩子 (即只有直系子女)
- 检索所有记录 特定记录的孙子 (即只有孙子)
- 检索记录的祖父母
- 检索记录的父项
- 检索所有记录(及其 孩子和孙子)
我希望这个查询以排序的方式返回数据,所以我可以创建一个结构化的文档(例如来自查询结果的 XML)。通过“排序”,我的意思是结果集是由父母“分组”的,然后是孩子,然后是孙子
我设计了一个像这样的简单表格(伪代码):
CREATE TABLE family_tree {id integer
, parent_id integer
, child_id integer
, fname varchar(16)
, lname varchar(32) };
我有几个问题:
(记住我要运行的查询 [(1)-(6) 上面])这是最好的(即我可以使用的最有效的表结构?如果不是,什么是?
谁能帮我编写 ANSI SQL 语句来执行上述查询 (1)-(6)?
【问题讨论】:
-
id, parentid 应该足够了。您使用的是 sql server 2005+ 吗?
-
搜索“嵌套集”和“分层数据”等术语,你会发现很多东西。
-
您使用的是什么数据库? Oracle 有分层查询(CONNECT BY)
-
@Thilo - Scooby 特别要求 ANSI SQL 排除供应商扩展,例如 Oracle,虽然它们很酷。