我得到了一个包含用户名,用户组和用户类型的表。
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