1

可能重复:
MYSQL AND OR 在多对多表上

我想做一个 mysql 查询,其中数据是从具有一定规则的数据库中检索的。

我想检查哪些条目类似于 var1 或 var2 或 var3 等。并且小于给定的 ID。

喜欢

SELECT * 
FROM database 
WHERE name = var1 
    OR name = var2 
    OR name = var3 
    AND id < 200

但是上面的行并没有真正起作用。此外,当没有更多条目(其中 id 小于 200)时,它会向我显示一些条目。

你懂我的意思吗?查询应选择包含我想要的名称之一且小于 ID 的数据...

我有一个逻辑思维问题...

4

3 回答 3

13

逻辑运算符具有优先级。如有疑问,请使用括号。

在你的情况下:

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

尽管如此,了解两个原始查询之间的区别很重要,因为您不可避免地会编写具有多个条件的查询。

于 2012-06-19T18:14:00.340 回答
1

使用括号设置逻辑表达式的优先级:

SELECT * FROM database_table WHERE (name = var1 OR name = var2 OR name = var3) AND id < 200
于 2012-06-19T18:16:41.647 回答
0

请阅读下文。

这两个查询有区别吗?

您将了解OR 和 AND 中括号的重要性

于 2012-06-19T18:21:56.107 回答