2012-12-12 131 views
0

是否可以在WHERE子句中創建一個IF語句,爲了過濾某個產品,我需要類似的東西。WHERE子句中的IF語句

例如,如果產品005具有100或小於該產品的排名應該不會出現在我的查詢結果

例如...

SELECT b.id, b.rank 
FROM b_products b 
WHERE IF(b.id = '005' AND b.rank < 100, b.id != '005') 
+1

爲什麼不會是可能做到你所需要的僅僅使用「常規」'WHERE' ? –

回答

1

IF()函數需要三個參數,而不是兩個:

IF(表達式1,表達式2,表達式3)

如果expr1爲TRUE(expr1 <> 0且expr1 <> NULL),那麼IF()返回 expr2;否則它返回expr3。 IF()返回數值或字符串值 ,具體取決於使用它的上下文。

但是,你有沒有任何說明,不能用正確的布爾表達式來完成:

SELECT b.id, b.rank 
FROM b_products b 
WHERE b.id<>'005' 
OR (b.id='005' AND b.rank<100) 
0

的條件直接在評估WHERE條款爲:

SELECT b.id, b.rank 
FROM b_products b 
WHERE NOT (b.id = '005' AND b.rank < 100) 
1

只需

WHERE (b.id = '005' AND b.rank >= 100) OR b.id != '005' 
0

我認爲你只需要一個OR子句。

SELECT 
    b.id, 
    b.rank 
FROM 
    b_products b 
WHERE 
    (b.id = '005' AND b.rank < 100) 
or 
    b.id <> '005' 
0

您在查詢指定else部分:

SELECT b.id, b.rank 
FROM b_products b 
WHERE IF(b.id = '005' AND b.rank < 100, b.id != '005', else condition)