2017-06-16 56 views
0

我有这样的一个表:SQL - 符合所有标准的返回值

Table1 
site | value 
a | banana 
b | banana 
c | banana 
a | fred 
c | quetzal 
a | quetzal 

比方说,我有一组网站的行值

a 
b 
c 

如何找到什么样的价值观表1有三个a,b和c三个网站吗?

我知道

SELECT value 
FROM Table1 
WHERE site IN (SELECT site FROM chosen_sites) 

将返回存在选择的网站中至少一个的所有值,但如何选择这三个的人?

回答

2

关闭我的头顶,我觉得是这样的:

select t.value 
from Table1 t 
join chosen_sites s on s.site = t.site 
group by t.value 
having count(distinct t.site) = (select count(*) from chosen_sites) 

编辑:seems to work

1

您可以用cross join网站所有不同的价值观和left join表1到这一点,并检查计数。

select v.value 
from table2 t2 --this is your table2 with all sites 
cross join (select distinct value from table1) v 
left join table1 t1 on t1.site=t2.site and t1.value=v.value 
group by v.value 
having count(t2.site)=count(t1.site)