如何在mysql查询中使用一个或多个OR和AND

Joh*_*ner 1 mysql database select

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

我想做一个mysql查询,其中从数据库中检索数据并带有一些规则.

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

喜欢

SELECT * 
FROM database 
WHERE name = var1 
    OR name = var2 
    OR name = var3 
    AND id < 200
Run Code Online (Sandbox Code Playgroud)

但上述行并不真正有效.此外,当没有更多条目(id小于200)时,它会显示一些条目.

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

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

Jas*_*ary 13

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

在你的情况下:

SELECT * FROM database WHERE (name = var1 OR name = var2 OR name = var3) AND id < 200
Run Code Online (Sandbox Code Playgroud)

您的原始查询解释如下,因为它AND具有更高的优先级.

SELECT * FROM database WHERE name = var1 OR name = var2 OR (name = var3 AND id < 200)
Run Code Online (Sandbox Code Playgroud)

更新

正如Rocket评论的那样,您可以压缩OR语句,IN因为它们在同一个字段上运行.这样做将消除括号的需要.

SELECT * FROM database WHERE name IN (var1,var2,var3) AND id < 200
Run Code Online (Sandbox Code Playgroud)

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

  • 您还可以执行`WHERE name IN(var1,var2,var3)AND id <200` (3认同)