我得到了一个包含用户名,用户组和用户类型的表。

A 0 0
B 0 1
C 1 2
D 2 2


现在我想要类似的东西


  获取组为0或1且类型为2的所有用户


我用:

SELECT * FROM table WHERE usergroup= 0 OR 1 AND usertype=2 GROUP BY usergroup


我希望它会返回用户名C,但奇怪的是它会返回A,C,D
我究竟做错了什么?

最佳答案

我将忽略该GROUP BY




SELECT * FROM table WHERE usergroup= 0 OR 1 AND usertype=2

  
  我究竟做错了什么?


首先,您有优先权问题;您的SQL查询等同于:

SELECT * FROM table WHERE usergroup = 0 OR (1 AND usertype=2)


用括号清楚:

SELECT * FROM table WHERE (usergroup = 0 OR 1) AND usertype=2


仍然存在一个问题,因为布尔运算符根本无法像这样工作:0 OR 1是一个计算结果为1的表达式。

您必须重复进行比较的事情:

SELECT * FROM table WHERE (usergroup = 0 OR usergroup = 1) AND usertype=2


但是,可以这样缩短:

SELECT * FROM table WHERE usergroup IN (0, 1) AND usertype=2

10-06 12:39