2011-04-19 78 views
0

我有一個包含用戶數據和m:n關係表的表,用於分配給不同的組。要篩選屬於組1和2的所有用戶,我編寫了以下SQL:使用mysql進行連接表的多個IN()檢查5.1

SELECT * 
FROM user AS u 
LEFT JOIN user_groups AS g ON g.uid = u.uid 
WHERE 1 IN (g.gid) AND 2 IN (g.gid) 

不幸的是,此聲明不起作用。結果是空的,但是有兩組用戶。當我第二次加入user_groups的時候,它可以工作:

SELECT * 
FROM user AS u 
LEFT JOIN user_groups AS g ON g.uid = u.uid 
LEFT JOIN user_groups AS g2 ON g2.uid = u.uid 
WHERE 1 IN (g.gid) AND 2 IN (g2.gid) 

有人可以向我解釋第一條語句出了什麼問題嗎? 如果有人能夠向我展示如何通過一個連接來解決這個問題,這將是一件好事,因爲我必須檢查各種數量的組。

謝謝你在前進, 皮特

回答

0

在第一個查詢嘗試或更換及。列gid不能同時爲1和2。

+0

好吧,我試過OR連接器,它的工作原理應該如此。我得到所有在組1或組2中的用戶。但是是否也有機會獲得組1中的所有用戶和組2中的所有用戶? – Pete 2011-04-19 14:06:52

+0

是的,這將獲得所有具有一個,另一個或兩者的記錄。 – 2011-04-19 14:46:15

+0

你知道一種方法來改變查詢,只得到有兩個組的用戶嗎? – Pete 2011-04-19 15:01:57