mysql - 在 mysql 查询中使用和/或有问题

标签 mysql sql

我在思考如何编写我需要的查询时遇到问题。 我会给你一个我正在尝试做的例子..

SELECT * FROM table WHERE clause1=10 AND clause2=20 AND clause3=30||40

我需要选择条目,其中 clause1 必须正好是 10,clause2 必须正好是 20,但 clause3 可以是 30 或 40,但必须正好是 30 或正好是 40。

所以它会选择条目,如果它是 10,20,30 或 10,20,40

SELECT * FROM table WHERE clause1=10 AND clause2=20 AND clause3=30 OR clause3=40 是不正确的,不是吗。

数字和条款仅供引用。 谢谢。

最佳答案

你必须在你的最后一个条件周围使用括号并使用两次clause3=:

 SELECT * FROM table WHERE clause1=10 AND clause2=20 AND (clause3=30 || clause3=40)

 SELECT * FROM table WHERE clause1=10 AND clause2=20 AND clause3 IN (30, 40)

注意

我建议使用运算符 OR 而不是 ||,因为在其他 SQL 方言(即 Oracle、Postgres)中 ||是串联运算符。 OR 是标准 SQL。所以第一条语句最好写成:

 SELECT * FROM table WHERE clause1=10 AND clause2=20 AND (clause3=30 OR clause3=40)

解释

运算符AND 的优先级高于OR。如果没有括号,表达式将对以下两个语句进行相同的计算

     SELECT * FROM table WHERE clause1=10 AND clause2=20 AND clause3=30 OR clause3=40
     SELECT * FROM table WHERE (clause1=10 AND clause2=20 AND clause3=30) OR clause3=40

这不是你想要的。因此,要么在 OR 表达式周围加上括号,要么使用更简单的 IN()。

关于mysql - 在 mysql 查询中使用和/或有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24893369/

相关文章:

Mysql 查询显示确切的 7 天过期客户

php - 使用 PHP MYSQL 删除帖子

sql - 无法使用 Windows 身份验证登录到 SQL Server

php - SQL 时间戳 -> 1970

sql - R - Postgresql 将数据导出到 CSV

Entity Framework 支持 SQL rowversion

php - 大数据库优化

PHP sql不返回所有值

mysql - 对于这个错误信息有什么解决办法吗?

sql - 按坐标查询花费的时间太长 - 优化选项?