我的表中有以下数据:
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条件被覆盖一样。
答案 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)