2011-08-10 66 views
0

這裏是我的代碼MySQL的其中value dosnt等於

SELECT * FROM categories 
LEFT JOIN cat_meta ON cat_meta.cat_id = categories.cat_id 
WHERE cat_meta.meta_key = 'Delete' 
AND cat_meta.meta_value <> 1 

我想要的就是以檢索所有不具有爲1的meta_value這可能意味着,如果類別meta_value沒有設置類別,或者如果meta_value = 0

而是發生了什麼是即時得到該已設置meta_value = 0

我應該怎麼改寫這個類別的列表?

+0

是meta_value int類型的? – Vinay

+0

@vinay - 是的。看來我的問題是因爲當類別的'meta_value'沒有設置,'meta_key'仍然運行,這消除了所有設置的類別...我不知道如何解決這個問題。 – cnotethegr8

+0

正如其中許多人已經建議的那樣,檢查IS NULL條件。它應該解決你的問題。 – Vinay

回答

1

一種方法是顯式檢查NULL(另一種是使用NVL(),但我不知道這是否是便攜式):

SELECT * FROM categories 
LEFT JOIN cat_meta ON cat_meta.cat_id = categories.cat_id 
WHERE cat_meta.meta_key = 'Delete' 
AND (cat_meta.meta_value <> 1 or cat_meta.meta_value is NULL) 

請注意:這將回報根本沒有meta_key ='Delete'的類別!

+0

謝謝!我將IS NULL應用於鍵和值,並做到了這一點。 – cnotethegr8

0

如果meta_value具有默認設置爲NULL,您可以添加

cat_meta.meta_value IS NULL OR cat_meta.meta_value <> 1 
0

你必須添加一個空檢查(如果meta_value爲空):

SELECT * FROM categories 
LEFT JOIN cat_meta ON cat_meta.cat_id = categories.cat_id 
WHERE cat_meta.meta_key = 'Delete' 
AND cat_meta.meta_value IS NULL OR cat_meta.meta_value <> 1 
相關問題