2014-10-18 76 views
1

我在我的表中的以下數據: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

回答

1

我懷疑,該領域的一個真的=「」,使有效的「湯姆」記錄的條件!你必須組OR條件,使用括號:

SELECT id, name FROM table 
WHERE name <> 'TOM' AND visible = 1 
     AND (field_1 <> '' OR field_2 <> '' OR field_3 <> '') 
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

你的問題的優先級:支架的OR:

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

您應該添加()

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

請附上空領域的比較一個palenthesis塊,如粗體顯示 SELECT id,name FROM表 WHERE name <>'TOM'AND visible = 1 和 field_1 <> '' 或field_2 <> '' 或field_3 <> '')

1
  1. 您必須插入支架
  2. 是空場真的是空的?也許「不會帶來正確的結果