在表迭代有列ID,标题和PARENTID。PARENTID用于在同一个表项的ID是考虑它的父 - 因此ParentID为NULL的任何条目是其本身是父亲的一个条目如何通过SQL表,“父母”和孩子”行是在同一个表
我需要一个查询,它将遍历每个父级并列出其下的任何子级(理想情况下用连字符或其他表示它的从属)任何人都知道如何做到这一点或如何指向正确的方向吗?
(我已经研究过T-SQL并阅读了许多类似的在线问题,但是我的SQL不够锐利感觉它,所以我会非常ppreciate一些指针!)
在表迭代有列ID,标题和PARENTID。PARENTID用于在同一个表项的ID是考虑它的父 - 因此ParentID为NULL的任何条目是其本身是父亲的一个条目如何通过SQL表,“父母”和孩子”行是在同一个表
我需要一个查询,它将遍历每个父级并列出其下的任何子级(理想情况下用连字符或其他表示它的从属)任何人都知道如何做到这一点或如何指向正确的方向吗?
(我已经研究过T-SQL并阅读了许多类似的在线问题,但是我的SQL不够锐利感觉它,所以我会非常ppreciate一些指针!)
在这里,你是语法使用!
WITH n(ID, Title) AS
(SELECT ID, Title
FROM YourTable
WHERE ID = (SELECT TOP 1 ID FROM YourTable WHERE ParentID IS NULL)
UNION ALL
SELECT nplus1.ID, nplus1.Title
FROM YourTable as nplus1, n
WHERE n.ID = nplus1.ParentID)
SELECT ID, Title FROM n
在Oracle
从自引用表得到各层数据,你可以在SQL 2008
WITH n(ID) AS
(SELECT ID FROM YourTable
UNION ALL
SELECT nplus1.ID
FROM YourTable as nplus1, n
WHERE n.ID = nplus1.ParentID)
SELECT ID FROM n
谢谢,这似乎工作!尽管我没有解释清楚:理想情况下,它应该列出第一个父母的标题(其中ParentID为空),然后列出该父母的子女的标题(例如理想地用连字符作为前缀) – 2012-07-30 11:50:39
- 这是一个CONNECT BY - 也许,让SQL服务器的线索..不知道 – Randy 2012-07-30 11:38:32
如果你真的想通过一个表进行迭代,编写一个查询,并用光标阅读。但我想,你想有一个查询返回一个行与其子行。我对吗? – DHN 2012-07-30 11:38:47
http://msdn.microsoft.com/en-us/library/ms186243(v=sql.105).aspx CTE /递归查询。 – xQbert 2012-07-30 11:46:43