2017-01-26 123 views
0
關係

讓我們說我們有這個表A_B,這是一個許多一對多關係的表A和b:查詢許多一對多在MySQL

+------+------+ 
| a_id | b_id | 
+------+------+ 
| 1 | 1 | 
| 1 | 2 | 
| 1 | 3 | 
| 2 | 1 | 
| 2 | 2 | 
+------+------+ 

現在我想查詢該表,所以我得到所有的a_ids,它們有一個b_id(1,2,3)的入口。在上面的例子中,輸出應該是

+------+ 
| a_id | 
+------+ 
| 1 | 
+------+ 

原因a_id = 2b_id = 3

一個可能的查詢的條目是:

select * 
from a 
join a_b as a_b1 
    on a_b1.a_id = a.id and a_b1.b_id = 1 
join a_b as a_b2 
    on a_b2.a_id = a.id and a_b2.b_id = 2 
join a_b as a_b3 
    on a_b3.a_id = a.id and a_b3.b_id = 3 

但... ... naaaa
什麼是這個問題的解決方案?

回答

2

我認爲一個簡單的方法是group byhaving

select a_id 
from a_b 
where b_id in (1, 2, 3) 
group by a_id 
having count(*) = 3; 
+0

AAH,好一個!沒有看到這種方法。謝謝! –

+0

如果重複,我會'計數(不同的b_id)= 3'。 – jarlh