sql查询条件和或

时间:2014-10-18 09:17:11

标签: mysql where where-clause

我的表中有以下数据:

id:1,name:TOM,visible:1,field_1:EMPTY,field_2:EMPTY,field_3:EMPTY。

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条件被覆盖一样。

6 个答案:

答案 0 :(得分:2)

您的问题优先:括号OR:

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

答案 1 :(得分:1)

and运算符的优先级高于or(有关其他详细信息,请参阅the documentation),因此,如果我们接受您的查询:

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 <> '')

答案 2 :(得分:1)

我怀疑,其中一个领域真的是!=&#39;&#39;,使条件对于#34; Tom&#34;记录。您必须使用括号对OR条件进行分组:

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

答案 3 :(得分:1)

你应该添加()

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

答案 4 :(得分:1)

请在一个paranthesis块中将空字段比较括起来,如粗体所示 SELECT id,name FROM table 名称&lt;&gt; &#39; TOM&#39; AND visible = 1       AND field_1&lt;&gt;&#39;&#39; OR field_2&lt;&gt;&#39;&#39; OR field_3&lt;&gt;&#39;&#39; )

答案 5 :(得分:1)

  1. 您必须插入括号
  2. 空字段真的是空的吗?也许''没有带来正确的结果