在 SQL 分组依据后过滤两列
Filter two columns after Group By in SQL
我有两个 table 类似下面的查询。我需要从 table "data" 中找出一个 setid 下的 table "Searchlist" 中的所有记录的 setid .
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 和状态。
请帮忙。
这称为关系划分。一种方法是
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)
已编辑
修改查询。 NULL
或 ''
in searchlist
匹配任何值。
我有两个 table 类似下面的查询。我需要从 table "data" 中找出一个 setid 下的 table "Searchlist" 中的所有记录的 setid .
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 和状态。
请帮忙。
这称为关系划分。一种方法是
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)
已编辑
修改查询。 NULL
或 ''
in searchlist
匹配任何值。