我有一个包含用户名,用户组和用户类型的表。
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
我做错了什么?
答案 0 :(得分:2)
我将忽略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
答案 1 :(得分:1)
你的SQL应该是:
SELECT *
FROM table
WHERE (usergroup = 0 OR usergroup = 1)
AND (usertype = 2)
为什么你需要'GROUP BY'还不清楚。
答案 2 :(得分:1)
SELECT * FROM table WHERE usergroup IN (0,1) AND usertype = 2