是否可以在 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')
简单地
WHERE (b.id = '005' AND b.rank >= 100) OR b.id != '005'
您必须在查询中指定 else 部分:
SELECT b.id, b.rank
FROM b_products b
WHERE IF(b.id = '005' AND b.rank < 100, b.id != '005', else condition)
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)
条件在WHERE
子句中直接评估为:
SELECT b.id, b.rank
FROM b_products b
WHERE NOT (b.id = '005' AND b.rank < 100)
我认为你只需要一个 OR 子句。
SELECT
b.id,
b.rank
FROM
b_products b
WHERE
(b.id = '005' AND b.rank < 100)
or
b.id <> '005'