Study Site Status
A 1 Approved
2 Closed
3 Withdrawn
B 1 Closed
2 Withdrawn
我有2个表:研究和网站。每个站点都有一个状态。在我加入2个表后,我想找出哪个研究没有任何具有批准状态的网站。
基本上,我想写一些东西来查找没有批准状态的研究中的所有网站。在这种情况下,它将是研究B.我似乎无法想到一种方式。
答案 0 :(得分:2)
您可以使用条件聚合来选择未获得状态批准的研究
<your join query here>
group by study
having count(case when status = 'Approved' then 1 end) = 0
或者您可以使用not exists
select * from site a
where not exists (
select 1 from study b
where b.status = 'Approved'
and b.site_id = a.id
)
答案 1 :(得分:2)
外连接表,将条件放在连接条件中,并使用where子句过滤有连接的行:
select a.*
from site a
left join study b on s.id = b.site
and b.status = 'Approved'
where b.site is null
虽然这可能看起来像一个奇怪的查询,但它实际上非常有效并且有效,因为错过的连接在列中具有所有空值 - 因此是where子句 - 并且您可以在连接条件上放置非关键条件。 / p>
答案 2 :(得分:0)
如果你提供了表格描述,那就好了,但是一个不会起作用,就像这样。
select study from study where site not in (select site from site where status = 'Approved')