Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql查询中使用和/或时出现问题_Mysql_Sql - Fatal编程技术网

在mysql查询中使用和/或时出现问题

在mysql查询中使用和/或时出现问题,mysql,sql,Mysql,Sql,我在思考如何编写所需的查询时遇到了一个问题。 我给你举个例子,说明我想做的事 从表中选择*,其中第1条=10,第2条=20,第3条=30 | | 40 我需要选择条目,其中第1条必须正好是10,第2条必须正好是20,但第3条可以是30或40,但必须正好是30或40 所以它会选择10,20,30或10,20,40的条目 从表中选择*,其中第1条=10,第2条=20,第3条=30或第3条=40不正确,但不是吗 数字和子句仅为示例。 谢谢。您必须在最后一个条件的后面加上括号,并使用两次clause3=

我在思考如何编写所需的查询时遇到了一个问题。 我给你举个例子,说明我想做的事

从表中选择*,其中第1条=10,第2条=20,第3条=30 | | 40

我需要选择条目,其中第1条必须正好是10,第2条必须正好是20,但第3条可以是30或40,但必须正好是30或40

所以它会选择10,20,30或10,20,40的条目

从表中选择*,其中第1条=10,第2条=20,第3条=30或第3条=40不正确,但不是吗

数字和子句仅为示例。
谢谢。

您必须在最后一个条件的后面加上括号,并使用两次
clause3=

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

注意

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

 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
     SELECT * FROM table WHERE (clause1=10 AND clause2=20 AND clause3=30) OR clause3=40

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

您必须在最后一个条件周围加上括号,并使用两次
clause3=

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

注意

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

 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
     SELECT * FROM table WHERE (clause1=10 AND clause2=20 AND clause3=30) OR clause3=40
这不是你想要的。因此,要么在或表达式周围加括号,要么使用更简单的IN()。

使用IN

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

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