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

  显示原文与译文双语对照的内容
134 4

有一个带有记录父母的表A 。表B 是表A 中记录的子记录,父ID之间的关系。子进程可以有"打开"或者"已经关闭"。一个父对象可以在表B 中有多个子元素。

如何将表A 中的记录显示为表B 中的所有子元素?否则不显示

时间:原作者:0个回答

115 4

可以检查不存在的查询是否存在不存在的查询:

SELECT *
FROM TableA
WHERE NOT EXISTS (
 SELECT 1
 FROM TableB
 WHERE TableB.ParentID = TableA.ID
 AND TableB.Status <> 'closed'
)
原作者:
145 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)

这个解决方案中的关键是比较特定父级的记录计数是否等于同一父级的记录计数。

原作者:
129 4

你可以使用联接来实现这里目

SELECT * FROM Table_A INNER JOIN Table_B on Table_A.Id = Table_B.ParentId WHERE 
Table_B.Status='closed';
原作者:
150 1

尝试以下查询-

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

SQL Server 2014

原作者:
...