Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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 Sql查询where条件和或_Mysql_Where_Where Clause - Fatal编程技术网

Mysql Sql查询where条件和或

Mysql Sql查询where条件和或,mysql,where,where-clause,Mysql,Where,Where Clause,我的表格中有以下数据: id:1,名称:TOM,可见:1,字段_1:空,字段_2:空,字段_3:空 SELECT id, name FROM table WHERE name <> 'TOM' AND visible = 1 AND field_1 <> '' OR field_2 <> '' OR field_3 <> '' 我只想选择名称不同于“name1”且至少有一个字段不为空的行 我希望这个查询没有结果,但我得到:id,T

我的表格中有以下数据:

id:1,名称:TOM,可见:1,字段_1:空,字段_2:空,字段_3:空

SELECT id, name FROM table 
WHERE name <> 'TOM' AND visible = 1 
      AND field_1 <> '' OR field_2 <> '' OR field_3 <> ''
我只想选择名称不同于“name1”且至少有一个字段不为空的行

我希望这个查询没有结果,但我得到:id,TOM,就像where name条件被覆盖一样

and运算符的优先级高于or,有关更多详细信息,请参见,因此如果我们接受您的查询:

SELECT id, name FROM table 
WHERE name <> 'TOM' AND visible = 1 
      AND field_1 <> '' OR field_2 <> '' OR field_3 <> '' 
添加澄清括号,我们将得到:

SELECT id, name FROM table 
WHERE (name <> 'TOM' AND visible = 1 AND field_1 <> '') 
      OR field_2 <> '' 
      OR field_3 <> ''
这不是你想要的。可以通过显式添加括号来解决此问题:

SELECT id, name 
FROM   table 
WHERE  name <> 'TOM' AND 
       visible = 1 AND
       (field_1 <> '' OR field_2 <> '' OR field_3 <> '')
and运算符的优先级高于or,有关更多详细信息,请参见,因此如果我们接受您的查询:

SELECT id, name FROM table 
WHERE name <> 'TOM' AND visible = 1 
      AND field_1 <> '' OR field_2 <> '' OR field_3 <> '' 
添加澄清括号,我们将得到:

SELECT id, name FROM table 
WHERE (name <> 'TOM' AND visible = 1 AND field_1 <> '') 
      OR field_2 <> '' 
      OR field_3 <> ''
这不是你想要的。可以通过显式添加括号来解决此问题:

SELECT id, name 
FROM   table 
WHERE  name <> 'TOM' AND 
       visible = 1 AND
       (field_1 <> '' OR field_2 <> '' OR field_3 <> '')

我怀疑,其中一个领域是真的!=,使条件对Tom记录有效。必须使用括号对一个或多个条件进行分组:

SELECT id, name FROM table 
WHERE name <> 'TOM' AND visible = 1 
      AND (field_1 <> '' OR field_2 <> '' OR field_3 <> '')

我怀疑,其中一个领域是真的!=,使条件对Tom记录有效。必须使用括号对一个或多个条件进行分组:

SELECT id, name FROM table 
WHERE name <> 'TOM' AND visible = 1 
      AND (field_1 <> '' OR field_2 <> '' OR field_3 <> '')

您的问题是优先级:将ORs括起来:

SELECT id, name
FROM table 
WHERE name <> 'TOM'
AND visible = 1 
AND (field_1 <> '' OR field_2 <> '' OR field_3 <> '')

您的问题是优先级:将ORs括起来:

SELECT id, name
FROM table 
WHERE name <> 'TOM'
AND visible = 1 
AND (field_1 <> '' OR field_2 <> '' OR field_3 <> '')
你应该加上

SELECT id, name
FROM    table 
WHERE name <> 'TOM'
AND visible = 1 
AND (field_1 <> ''OR field_2 <> '' OR field_3 <> '')
你应该加上

SELECT id, name
FROM    table 
WHERE name <> 'TOM'
AND visible = 1 
AND (field_1 <> ''OR field_2 <> '' OR field_3 <> '')

请在一个方框中附上空字段比较,如粗体所示 从表中选择id、名称 其中名称为“TOM”且可见=1
和字段_1或字段_2或字段_3

请在一个方框中附上空字段比较,如粗体所示 从表中选择id、名称 其中名称为“TOM”且可见=1 和字段_1或字段_2或字段_3

你必须插入括号 空字段真的是空的吗?也许这个方法没有带来正确的结果 你必须插入括号 空字段真的是空的吗?也许这个方法没有带来正确的结果
定义为空。您的意思是null、空白还是字面上的文本为空?您可以为SQLFIDLE提供数据块字段,字段_1 2和3是varchar。请原谅我的定义是空的。您的意思是null、空白还是字面上的文本为空?您可以为SQLFIDLE提供数据块字段,字段_1 2和3是varchar。原谅