WHERE子句中的IF语句

时间:2012-12-12 12:26:16

标签: mysql sql

是否可以在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')

5 个答案:

答案 0 :(得分:1)

简单地

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

答案 1 :(得分:1)

您必须在查询中指定else部分:

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

答案 2 :(得分:1)

IF()函数需要三个参数,而不是两个:

  

如果(表达式1,表达式2,表达式3)

     

如果expr1为TRUE(expr1&lt;&gt; 0且expr1&lt;&gt; NULL),则IF()返回   表达式2;否则返回expr3。 IF()返回一个数字或字符串   值,取决于使用它的上下文。

但是,您没有描述使用适当的布尔表达式无法实现的任何内容:

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

答案 3 :(得分:0)

条件在WHERE子句中直接评估为:

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

答案 4 :(得分:0)

我认为你只需要一个OR条款。

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