SQL查询的WHERE条件和或

问题描述:

我在我的表中的以下数据:SQL查询的WHERE条件和或

ID:1,名称:TOM,可见:1,field_1:空,field_2:空,field_3:空。

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

我想只选择名称与'name1'不同的行,并且至少有一个字段不为空。

我预计这个查询没有结果,但我得到:id,TOM就像名称的条件被覆盖。

+0

定义”空“。你的意思是空,空白或字面上的文字“空”? – Bohemian 2014-10-18 09:23:51

+0

您可以提供sqlfiddle与您的数据 – user4035 2014-10-18 09:24:05

+0

空白字段,field_1 2和3是varchars。赦免 – im7xs 2014-10-18 09:24:27

我怀疑,该领域的一个真的=“”,使有效的“汤姆”记录的条件!你必须组OR条件,使用括号:

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

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

你的问题的优先级:支架的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 <> '') 

请附上空领域的比较一个palenthesis块,如粗体显示 SELECT id,name FROM表 WHERE name <>'TOM'AND visible = 1 和 field_1 <> '' 或field_2 <> '' 或field_3 <> '')

  1. 您必须插入支架
  2. 是空场真的是空的?也许“不会带来正确的结果