sql – 查询列出所有分层父母和兄弟姐妹及其子女,但不列出自己的孩子
|
我有一个基本的SQL表,每行之间有一个简单的层次连接.也就是说,每行都有一个ParentID,并使用它与另一行连接.其内容如下 AccountID | AccountName | ParentID
---------------------------------------
1 Mathew 0
2 Philip 1
3 John 2
4 Susan 2
5 Anita 1
6 Aimy 1
7 Elsa 3
8 Anna 7
.............................
.................................
45 Kristoff 8
希望结构清晰 但我对listng的要求有点奇怪.那是当我们传递一个AccountID时,它应该列出所有的父母和兄弟姐妹和兄弟姐妹的孩子.但它永远不会将该AccountID的任何孩子列入任何级别.我可以用图片更详细地解释一下.对不起,图片清晰..我的旧手机摄像头.. 当我们传递AccountID 4时,它应列出所有父母及其兄弟姐妹,但不应列出4,6,7,8,9,10.这意味着应该在结果中避免使用帐户及其中的任何子帐户(基于图片树元素).希望解释清楚. 解决方法如果我做对了,你需要输出整个表,除了4和它的所有后代然后尝试这个递归查询:WITH CT AS
(
SELECT * FROM T WHERE AccountID=4
UNION ALL
SELECT T.* FROM T
JOIN CT ON T.ParentID = CT.AccountId
)
SELECT * FROM T WHERE AccountID
NOT IN (SELECT AccountID FROM CT)
SQLFiddle demo 回答评论中的问题:
您应该从ID = 2开始并前往底部排除ID = 4,因此您在ID = 4后剪切整个子树: WITH CT AS
(
SELECT * FROM T WHERE AccountID=2
UNION ALL
SELECT T.* FROM T
JOIN CT ON T.ParentID = CT.AccountId
WHERE T.AccountId<>4
)
SELECT * FROM CT (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
