微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

回答评论中的问题:

So it will not traverse to the top. It only traverse to specified
account. For example if I pass 4 as first parameter and 2 as second
parameter,the result should be these values 2,5,11,12

您应该从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

原文地址:https://www.jb51.cc/mssql/78853.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐