我有一个包含用户数据的表和一个m:n关系表,用于分配给不同的组。要过滤属于组1和组2的所有用户,我编写了以下SQL:
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 :(得分:0)
在您的第一个查询中尝试将OR替换为OR。列gid不能同时为1和2。