[英]mysql - join where right hand table has ALL required
我有 t1:
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
因此,沒有為 pid 1 選擇 vid 3,因為 ps 2 不在 vs...
我在加入這里很糾結...幫助?
您可以通過多種方式獲取滿足此條件的pid
。 這是一個:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.