2015-08-24 66 views
-3

這是我的查詢:SQL SELECT查詢 - 忽略空/空場

SELECT * 
FROM `fruit` 
WHERE ingredient1 IN ('$Aardbei','$Appel','$Banaan','$Mango','$Perzik','$Sinaasappel','$Peer','$Pruim','$Kiwi') 
OR ingredient2 IN ('$Aardbei','$Appel','$Banaan','$Mango','$Perzik','$Sinaasappel','$Peer','$Pruim','$Kiwi') 
OR ingredient3 IN ('$Aardbei','$Appel','$Banaan','$Mango','$Perzik','$Sinaasappel','$Peer','$Pruim','$Kiwi') 
OR ingredient4 IN ('$Aardbei','$Appel','$Banaan','$Mango','$Perzik','$Sinaasappel','$Peer','$Pruim','$Kiwi') 
OR ingredient5 IN ('$Aardbei','$Appel','$Banaan','$Mango','$Perzik','$Sinaasappel','$Peer','$Pruim','$Kiwi') 

的變量或者簡單的名稱本身($ Aardbei是 'Aardbei',$阿佩爾是 '阿佩爾' 等)或空(如'',實際上不是未設置或NULL) 有問題的表可以將'成分'字段設爲空,如果變量也是空的,則匹配該字段,這不是我想要的。

我該怎麼做才能讓查詢中的空變量被忽略,而不是匹配到SQL表中的空字段?

+0

檢查建立查詢後,如果*空()*您的增值經銷商,然後建立自己的查詢與填充onces – donald123

+1

BTW你應該改變你的表設計之前。它沒有正常化。添加一個'fruit_ingredient'和一個'ingredients'表 –

+0

@Donald - 很確定這會導致多個錯誤,因爲我試圖使用未設置的變量,但我會嘗試。 – Makkebakke

回答

0

您的問題的直接答案是修復表,使其包含NULL值而不是空字符串值。您可以在一個鏡頭做到這一點的:

update fruit 
    set ingredient1 = nullif(ingredient1, ''), 
     ingredient2 = nullif(ingredient2, ''), 
     . . .; 

因爲NULL不匹配任何東西,它不會匹配''

我要指出的是,你可以做同樣薄的where

where nullif(ingredient1, '') in . . . or 
     nullif(ingredient2, '') in . . . 

更好的答案,不過,是具有多列代表一個值的「陣列」是不是一個好的設計SQL。相反,您需要一個FruitIngredients表,每個FruitIngredient一行。這也將簡化您的查詢。

+0

1.我試過這樣做,如果你願意,可以給我發送表格設置的屏幕抓圖。 – Makkebakke

+0

2.說實話只是讓我更加困惑。不知道你的意思。我寧願只用我的工作。 – Makkebakke

+0

廢除了所有空白字段,現在完美工作。謝謝。 – Makkebakke

0

使用按如下─

SELECT * 
FROM `fruit` 
WHERE ingredient1 IN ('$Aardbei','$Appel','$Banaan','$Mango','$Perzik','$Sinaasappel','$Peer','$Pruim','$Kiwi') 
OR ingredient2 IN ('$Aardbei','$Appel','$Banaan','$Mango','$Perzik','$Sinaasappel','$Peer','$Pruim','$Kiwi') 
OR ingredient3 IN ('$Aardbei','$Appel','$Banaan','$Mango','$Perzik','$Sinaasappel','$Peer','$Pruim','$Kiwi') 
OR ingredient4 IN ('$Aardbei','$Appel','$Banaan','$Mango','$Perzik','$Sinaasappel','$Peer','$Pruim','$Kiwi') 
OR ingredient5 IN ('$Aardbei','$Appel','$Banaan','$Mango','$Perzik','$Sinaasappel','$Peer','$Pruim','$Kiwi') 
AND ingredient1<>'' AND ingredient2<>'' AND ingredient3<>'' AND ingredient4<>'' AND ingredient5<>''; 
+0

它的回收少了不需要的列,但仍有一些。例如,當我只查找'Appel'時,它會返回一個只填充前兩個字段的列,而實際上不是'Appel'。 – Makkebakke

+0

@Makkebakke:在這裏沒有得到你的觀點,無論你在這5個字段中傳遞的變量是什麼,但是在查詢結束時,如果任何列包含''(空白)值...則不包括...... –