计数与0记录不同?

时间:2015-03-07 00:43:17

标签: sql count

Study   Site    Status
A       1       Approved
        2       Closed
        3       Withdrawn
B       1       Closed
        2       Withdrawn

我有2个表:研究和网站。每个站点都有一个状态。在我加入2个表后,我想找出哪个研究没有任何具有批准状态的网站。

基本上,我想写一些东西来查找没有批准状态的研究中的所有网站。在这种情况下,它将是研究B.我似乎无法想到一种方式。

3 个答案:

答案 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')