1

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

5 回答 5

1

简单地

WHERE (b.id = '005' AND b.rank >= 100) OR b.id != '005'
于 2012-12-12T12:29:41.420 回答
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)
于 2012-12-12T12:30:01.933 回答
1

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

IF(expr1,expr2,expr3)

如果 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)
于 2012-12-12T12:32:42.790 回答
0

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

SELECT b.id, b.rank 
FROM b_products b 
WHERE NOT (b.id = '005' AND b.rank < 100)
于 2012-12-12T12:29:25.123 回答
0

我认为你只需要一个 OR 子句。

SELECT 
    b.id, 
    b.rank 
FROM 
    b_products b 
WHERE 
   (b.id = '005' AND b.rank < 100)
or 
    b.id <> '005'
于 2012-12-12T12:29:56.477 回答