2016-02-08 46 views
0

我有一個下表,我想選擇應該有所有提到的值的記錄。例如 選擇CompanyID其中應該有全部三個ProviderID 200,300,400。因此,運行查詢應該會重啓CompanyID 2.與IN相反。提前致謝 !MySQL:從多對多表中獲取條目

CompanyID  |  ProviderID 
-------------------------------------- 
    1     100 
    2     200 
    3     500 
    4     600 
    2     300 
    2     400 
    7     100 

回答

1

做一個GROUP BY,與任何3個想EmployeeID爲值只選擇行。使用HAVING以確保獲得3個不同的EmployeeID值。

select CompanyID 
from tablename 
where EmployeeID IN (200, 300, 400) 
group by CompanyID 
having count(distinct EmployeeID) = 3 

另一種方法是雙自聯接,每個EmployeeID一個。然而,這不太靈活:

select distinct t1.CompanyID 
from (select CompanyID from tablename where EmployeeID = 200) t1 
join (select CompanyID from tablename where EmployeeID = 300) t2 
    on t1.CompanyID = t2.CompanyID 
join (select CompanyID from tablename where EmployeeID = 400) t3 
    on t2.CompanyID = t3.CompanyID 
+0

IN將檢查它是否與這些值中的任何值匹配。我想選擇具有與所有這些值相對應的條目的行。如果它甚至沒有一個不匹配的值,它不會返回記錄 – noob

+0

請參閱HAVING子句。在那裏確保您獲得3個不同的EmployeeID值! – jarlh