2011-04-19 26 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