在SQL中的Group By之后筛选两列

时间:2016-10-13 09:27:42

标签: sql sql-server-2008-r2 subquery nested-queries

我有两个表,如下面的查询。我需要从“数据”表中找出setid,其中包含“selist”下的“搜索列表”表中的所有记录。

create table data(SetId int,drugid int, status varchar(1))
insert into data values (1,105,'A')
insert into data values (1,103,'I')

insert into data values (2,105,'A')
insert into data values (2,103,'A')

insert into data values (3,105,'A')

insert into data values (4,110,'A')

create table searchlist (id int, status varchar(1))
insert into searchlist values (105,'A')
insert into searchlist values (103,'I')

我试图这样做,但是在SetId做分组之后无法匹配drugid和状态列。

请帮助。

1 个答案:

答案 0 :(得分:3)

这被称为关系分裂。一种方法是

select setid
from data d 
join searchlist s on d.drugid = s.id and (d.status=s.status or coalesce(s.status,'')='')
group by setid
having count(*) = (select count(*) from searchlist)

<强> EDITED

修改了查询。 <{1}}中的NULL''匹配任何值。