2015-07-28 58 views
1

我試圖找出一種方法來查詢我的架構在sqlfillde與if子句,基本上我需要檢查表是否有行匹配如果標籤==?或者如果name ==?,那麼下面的查詢就完成了工作。在情況下,如果sqlfiddle滯後,我就會把該方案之下查詢,如果,如果子句返回false mysql

id name  label description 
1 Grams  G  Used to measure light weight items 
1 Kilograms G  Used to measure heavy weight items 
3 M Liters ML Used to measure liquids 
4 Grams G L  Used to measure liquids 

SELECT * FROM `catutype` WHERE label = "G" OR name = "Grams" 

但如果匹配的記錄的ID == 2,我wan't排除記錄。所以我試過這個,

SELECT * FROM `catutype` WHERE id!= 2 AND label = "G" OR name = "Grams" 

正如你所看到的,它沒有成功。我得到的唯一的解決辦法是通過一個子查詢

SELECT *,(SELECT label FROM catutype WHERE name = "Grams") as "type" FROM catutype WHERE catutype.id != 2 

但我依然無法運行兩個子奎雷斯檢查標籤有比賽,以使其更清晰,我會寫一個簡單的僞代碼,我需要在mysql中。

if(id!=2) 
{ 
check if label = ? OR name = ? 
} 

謝謝。

回答

0

更改您的查詢:

SELECT * FROM `cat_type` WHERE id!= 2 AND (label = "KG" OR name = "Kilo-Grams") 

這是因爲運營商的優先級,所以你將不得不利用(),排除條件。

說明:使用(),它將檢查id!=2AND的部分的其餘部分將被視爲一個單獨的表達式,即它會檢查label = "KG" OR name = "Kilo-Grams"爲好。所以如果兩個部分都滿足的話,查詢會給出正確的結果。

+0

謝謝@Nikhil,解釋清楚。 – droiddude

+0

歡迎@droiddude :) –

0

閱讀有關運算符優先級,你需要從括號內的優先級高於OR

SELECT * FROM `catutype` WHERE id!= 2 AND (label = "G" OR name = "Grams") 

沒有他們,你的發言被分析爲

SELECT * FROM `catutype` WHERE (id!= 2 AND label = "G") OR name = "Grams" 
+0

謝謝,閱讀真的幫助我分配。 – droiddude