选择所有子记录具有特定状态的父记录

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

表A有记录 - 父母。在表B中是来自表A的记录的记录子项,它们之间的关系是父ID。儿童可以具有“开放”或“关闭”状态。父母可以在表B中有多个孩子。

如何显示表A中包含表B中所有子项的记录?否则不显示

sql sql-server sql-server-2014
5个回答
1
投票

您可以使用NOT EXISTS查询检查是否存在未关闭的记录:

SELECT *
FROM TableA
WHERE NOT EXISTS (
    SELECT 1
    FROM TableB
    WHERE TableB.ParentID = TableA.ID
    AND TableB.Status <> 'closed'
)

1
投票

我相信这应该做到:

select a.id
from tablea a
join tableb b on 
  a.id = b.parentid
group by a.id
having count(*) = sum(case when b.status = 'closed' then 1 else 0 end)

此解决方案的关键是比较为特定父级找到的记录数是否等于状态为closed的同一父级的记录计数。


0
投票

您可以使用join来实现此目的

SELECT * FROM Table_A INNER JOIN Table_B on Table_A.Id = Table_B.ParentId WHERE 
Table_B.Status='closed';

0
投票

尝试以下查询 -

Select A.* from A join B on A.ID=B.parentID
where B.status='closed'

SQL Server 2014


0
投票

如果没有子记录(这可能是错误的),这将返回父级:

SELECT *
FROM tabA AS A
WHERE NOT EXISTS
 (
   SELECT * 
   FROM tabB AS B
   WHERE b.Parent = a.id
     AND b.status <> 'closed'
 )

如果有子记录且所有都已“关闭”,则返回父项:

SELECT *
FROM tabA
WHERE id IN
 (
   SELECT Parent
   FROM tabB
   GROUP BY Parent
   HAVING Max(CASE WHEN status = 'closed' THEN 0 ELSE 1 END) = 0
 )
© www.soinside.com 2019 - 2024. All rights reserved.