2017-06-16 6 views
0

Ich habe eine Tabelle wie folgt aus:SQL - Rückgabewerte, die alle Kriterien erfüllen

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

Lassen Sie uns sagen, dass ich eine Menge von Zeilen mit Website haben Werte

a 
b 
c 

Wie finde ich, welche Werte in Tabelle1 haben alle drei von a, b und c für Website?

Ich weiß, dass

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

Werden alle Werte zurück, die mindestens eine der ausgewählten Standorten gibt es für, aber wie wähle ich die, die in allen drei?

Antwort

2

Aus der Spitze von meinem Kopf, ich glaube, so etwas wie diese:

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) 

Edit: seems to work.

1

Sie können cross join alle verschiedenen Werte mit Standorten und left join table1 auf diese und überprüfen Sie auf Zählungen.

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) 
Verwandte Themen