如何检查主表是否在同一张表中不是parentID

问题描述 投票:0回答:1

如何从表中删除包含父子关系的行。我搜索的记录是最近12个小时内未更改状态且没有孩子的记录,这意味着我必须确定它是否是其他记录的父记录。我的查询如下所示:

SELECT ItemID, ParentID, StatusID FROM table1
WHERE Digitalstatus = 1 AND LastChangedDateTime>= DATEADD(HOUR,-12, GETDATE()) AND StatusID = 1 


MemberID    ItemID      ParentID    StatusID
--------       --------      ------     --------
500006      4663119     NULL            1
687194      4663121     NULL            1

并且当我搜索其中一个成员时,我可以看到ItemID是其他记录中的父项

SELECT * FROM Table1 WHERE MemberID = 500006

MemberID    ItemID      ParentID    StatusID
--------    -------     --------    --------
 500006     3667431     NULL            1
 500006     3704851     3667431         2
 500006     4663041     NULL            1
 500006     4663119     NULL            1
 500006     4663120     4663119         2
 500006     3792268     3704851         3
 500006     4663124     4663120         3

我的问题是,如何查找不是其他记录的父项的ItemID?

sql-server parent-child sql-delete
1个回答
0
投票

使用存在子句:

SELECT *
FROM Table1 t1
WHERE
    MemberID = 500006 AND
    NOT EXISTS (SELECT 1 FROM Table1 a
                WHERE a.MemberID = 500006 AND a.ParentID = t1.ItemID);

上述查询的逻辑读起来很接近您的要求,并且仅在其ItemID不能同时用作其他记录的ParentID时保留一条记录。

© www.soinside.com 2019 - 2024. All rights reserved.