假设我有一个名为'物种'的表,有3列:'Id','ancestorId'和'name'。 '祖先'是祖先物种的'Id',例如,如果智人的祖先是南方古猿,而南方猿的'Id'是5,那么智人的'ancestorId'是5.假设,有一种叫'第一物种'的物种,其'Id'为0或无效。因此,无论有多少节点在路上,我想要的是选择一个特定物种的祖先列表,比如说,智人,到'第一物种'。这可能与SQL?这是可能的SQL?
1
A
回答
3
的ANSI方法是使用递归WITH子句:
WITH hierarchy AS (
SELECT t.id,
t.name,
t.ancestor
FROM TABLE t
WHERE t.ancestor IS NULL
UNION
SELECT t.id,
t.name,
t.ancestor
FROM TABLE t
JOIN hierarchy h ON h.ancestorid = t.id)
SELECT *
FROM hierarchy
支持:
- 的SQL Server 2005+
- 的Oracle 11gR2的
- 的PostgreSQL 8.4+
Oracle的层次结构q从v2开始支持uery,使用CONNECT BY
语法。
3
Managing Hierarchical Data in MySQL对于你正在谈论的内容来说是一个很好的资源,特别是如果你使用的是没有递归查询支持的数据库系统。它讨论了您需要如何构建数据以便更轻松地完成您想要的任务。
0
是的,它我可能在SQL中。您可以为此使用递归查询。看看here。阅读整个页面。
WITH req_query AS
(
SELECT id,
name,
ancestorid
FROM your_table
WHERE name='homo sapiens' //If you want to search by id, then change this line
UNION
SELECT yt.id,
yt.name,
yt.ancestorid
FROM your_table yt,
req_query rq
WHERE yt.id = rq.ancestorid
AND rq.id != 0
AND rq.id is not null
)
SELECT *
FROM req_query
;
编辑 这将ORACLE,SQL服务器,PostgreSQL和使用具有递归查询支持任何其他数据库。要处理不支持递归查询的数据库,您将不得不使用嵌套集模型。
0
WITH hierarchy AS (
SELECT t.id,
t.name,
t.ancestor
FROM TABLE t
WHERE t.ancestor IS NULL
UNION
SELECT t.id,
t.name,
t.ancestor
FROM TABLE t
JOIN hierarchy h ON h.ancestorid = t.id)
SELECT *
FROM hierarchy
+0
如果您发布的是代码或XML,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮(101 010),以良好地格式化和语法突出显示它! – 2010-08-18 04:48:05
0
你很可能不想让你的第一个物种的ID为空。 null与0非常不同。null表示您不知道该值是什么。 0表示值为0.请注意,null <> null和0 = 0。这可能会影响您如何搜索识别firt物种。
相关问题
- 1. 这是可能的与SQL查询?
- 2. 这可能与SQL?
- 3. 这是可能的
- 4. 这可能吗? SQL Operators <&&!=
- 5. Sql Custom Pivot - 这可能吗?
- 6. 这在SQL中可能吗?
- 7. 这是什么类型的数据库,可能是sql注入?
- 8. 这是可能的列表?
- 9. 这是可能的Wordpress
- 10. 这是可能的编码
- 11. 这是可能的在mySQL
- 12. 这是可能的JavaScript?
- 13. 这是可能的.htaccess?
- 14. 这是一个可能的子查询与标准的SQL
- 15. 使用SQL和JOIN的理货投票(这是可能的吗?)
- 16. “功能”是功能,这怎么可能?
- 17. 这是可能做在RethinkDB
- 18. 这是可能通过JavaScript?
- 19. 这是可能与IList
- 20. 这是可能与卷曲?
- 21. 这是可能的SQL主键? (排在列表上)
- 22. 这可能是sql注入的受害者
- 23. 这怎么可能是这个== null?
- 24. 是否有可能这两个功能
- 25. GAE:这是可能的的cron /队列
- 26. ViewPager + ScrollView中的PagerTabStrip。这是可能的?
- 27. 这真的是一个可能的InvalidOperationException?
- 28. 在sql中键入xml - 这可能吗?
- 29. 这在Oracle/Sql中可能吗?
- 30. T-SQL - GROUP BY与LIKE - 这可能吗?
你也可以看看sasfrog的回答。嵌套集模型是管理分层数据的一个很好的解决方案。 – 2010-08-18 03:55:54