数据库表中的嵌套数据
问题描述:
我有一张表,其中包含以下方式相关的记录:数据库表中的嵌套数据
父母,子女,孙子女。
我想能够运行查询,做到以下几点:
- 检索是 从一个特定的记录下来的所有记录
- 检索的特定记录的直接 儿童的所有记录 (即只直接孩子)
- 检索的特定记录的 孙子 (即只孙子)的所有记录
- 检索记录的祖父母
- 检索记录
- 检索所有的记录(以及他们的 子女和孙子女)
我想这个查询的排序方式返回数据的父母,所以我可以创建一个结构化的文件(例如来自查询结果的XML)。通过“分类”,我的意思是结果集“分组”,由家长THEN孩子,那么孙子
我设计了一个简单的表像这样的(伪代码):
CREATE TABLE family_tree {id integer
, parent_id integer
, child_id integer
, fname varchar(16)
, lname varchar(32) };
我有多少问题:
(在心中的疑问我想运行轴承[(1) - (6)以上)是这是最好的(即最有效的表结构如果没有我可以使用?,什么是?
任何人都可以帮我编写ANSI SQL语句来执行上面的查询(1) - (6)吗?
答
检查sitepoint tutorial就可以了。
- 存储数据(id,parent_id)的递归方法允许您检索特定节点的直接后代。
- 预先定义的树遍历方法允许您检索特定节点的整个分支。
所以有id,parent_id,left,right
列是你最好的选择。该教程保存了完整的代码,但SQL查询应该足够清楚。
您应该能够从教程中提供的所有查询中获得所有查询。
答
我看你已经接受Eimantas的回答,他说,
“因此,有ID,PARENT_ID,左,右列是你最好的选择。“
我想明确地指出,从引用链接(斜体矿)以下报价:
”添加节点
我们如何添加一个节点到树?有两种方法:你可以在你的表中保留父列,然后重新运行rebuild_tree()函数 - 一个简单但不是那种优雅的函数; ,或者您可以更新新节点右侧所有节点的左值和右值。“
ID,parentId的应sufficiant。你使用SQL Server 2005 +? – 2009-09-28 10:07:36
搜索,以便像‘套组’和‘分层数据’,你会发现很多东西条款。 – markus 2009-09-28 10:10:01
您正在使用什么数据库?Oracle有分层查询(CONNECT BY) – Thilo 2009-09-28 10:11:40