我想做一个mysql查询,其中从数据库中检索数据并进行一些调整。
我想检查哪些条目与var1或var2或var3等相似,并且小于给定的ID。
像
SELECT *
FROM database
WHERE name = var1
OR name = var2
OR name = var3
AND id < 200
但上述行并不真正有效。此外,当没有更多条目(id小于200)时,它会显示一些条目。
你知道我的意思吗?查询应该选择包含我想要的名称之一且小于ID的数据...
我有一个逻辑思维问题......
答案 0 :(得分:13)
precedence有逻辑运算符。如有疑问,请使用括号。
在你的情况下:
SELECT * FROM database WHERE (name = var1 OR name = var2 OR name = var3) AND id < 200
您的原始查询解释如下,因为AND
具有更高的优先级。
SELECT * FROM database WHERE name = var1 OR name = var2 OR (name = var3 AND id < 200)
如 Rocket 所述,您可以将OR
语句压缩为IN
,因为它们在同一个字段上运行。这样做会消除对括号的需要。
SELECT * FROM database WHERE name IN (var1,var2,var3) AND id < 200
尽管如此,了解两个原始查询之间的区别非常重要,因为您不可避免地会编写具有多个条件的查询。
答案 1 :(得分:1)
使用括号设置逻辑表达式的优先级:
SELECT * FROM database_table WHERE (name = var1 OR name = var2 OR name = var3) AND id < 200
答案 2 :(得分:0)