假設我有一個名爲'物種'的表,有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