簡體   English   中英

mysql - 加入右手表有所有要求的地方

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM