gpt4 book ai didi

sql - 查询列出所有分层的 parent 和 sibling 及其 child ,但不列出自己的 child

转载 作者:行者123 更新时间:2023-12-02 11:03:08 24 4
gpt4 key购买 nike

我有一个基本的 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

希望结构清晰

但是我列出这些的要求有点奇怪。也就是说,当我们传递一个 AccountID 时,它应该列出它的所有 parent 、 sibling 和 sibling 的 child 。但它永远不会将该 AccountID 的任何子级列出到任何级别。我可以用图片更详细地解释这一点。抱歉图片的清晰度。我的是旧手机摄像头。 enter image description here

当我们传递AccountID 4时,它应该列出所有Parents及其 sibling ,但不应该列出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

关于sql - 查询列出所有分层的 parent 和 sibling 及其 child ,但不列出自己的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23212033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com