2017-01-29 2 views
-1

У меня есть t1:MySQL - присоединяйся, где правая рука таблица имеет все необходимые

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

и t2

pid ps 
1  2 
1  3 
2  1 
2  3 

мне нужно ТОЛЬКО t2.pid, t1.vid, где все необходимые t1.vs являются в t2.ps для соответствующего t2.pid:

pid vid 
    1 1 
    1 2 
    2 1 
    2 3 

Итак, VID-не выбран для PID 1, 2 пса не в против ...

Я собираюсь запутаться в объединениях здесь ... Помогите?

+0

Вы можете показать свой текущий запрос? –

+0

'right external join' - это то, что сохраняет все значения правого бокового стола! –

ответ

0

Вы можете получить pid s, которые удовлетворяют этому условию различными способами. Вот один:

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 

Вы можете использовать это в запросе, чтобы получить то, что вы хотите:

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; 

Наконец, вы могли бы получить ps значений в виде списка, только с помощью агрегации:

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 
Смежные вопросы