2017-01-29 1 views
-1

Ich habe t1:mysql - beitreten, wo rechte Hand Tisch ALL hat erforderlich

vid vs 
1  1 
1  2 
1  3 
2  2 
2  3 
3  1 
3  3 

und T2

pid ps 
1  2 
1  3 
2  1 
2  3 

ich NUR t2.pid benötigen, t1.vid wo alle erforderlichen t1.vs sind in t2.ps für den jeweiligen t2.pid:

pid vid 
    1 1 
    1 2 
    2 1 
    2 3 

so vid 3 für pid 1 als ps nicht ausgewählt ist 2 nicht in vs ...

Ich verwickle mich hier in Joins ... Hilfe?

+0

Können Sie Ihre aktuelle Anfrage anzeigen? –

+0

'Recht äußerer Anschluss' ist, was alle Werte des rechten Seitentabelle hält! –

Antwort

0

Sie können die pid s, die diese Bedingung erfüllen, auf verschiedene Arten erhalten. Hier ist eine:

select t2.pid 
from t2 left join 
    t1 
    on t2.pid = t1.vid 
group by t2.pid 
having count(*) = count(t1.vid); -- all are present 

Sie können diese dann in einer Abfrage verwenden zu bekommen, was Sie wollen:

select t2.* 
from t2 join 
    (select t2.pid 
     from t2 left join 
      t1 
      on t2.pid = t1.vid 
     group by t2.pid 
     having count(*) = count(t1.vid) 
    ) tt2 
    on t2.pid = tt2.pid; 

Schließlich könnte man die ps Werte als Liste, nur Aggregation mit:

select t2.pid, group_concat(t2.ps) 
from t2 left join 
    t1 
    on t2.pid = t1.vid 
group by t2.pid 
having count(*) = count(t1.vid); -- all are present