我正在做一个报告,我无法以编程方式构造SQL。我有两个值输入报告。值可以是以下三个选项之一:
查询需要有一个WHERE子句。如果“兑换”被输入,它必须具有:
... WHERE balance < 0
如果输入“购买”,则必须具有:
... WHERE balance >= 0
如果两者都被喂入,这种情况可以完全排除,或者可以说:
... WHERE balance >= 0 OR balance < 0 --> but this is redundant
有没有办法在SQL中应用这种逻辑?在SQL中是这样的:
SELECT * FROM account WHERE (if param1 = 'redeem' then 'balance <= 0) ... etc
答案 0 :(得分:3)
是的。你快到了。
WHERE (param='redeem' and balance <=0) or (param='purchase' and balance>=0) or (param='redeem AND purchase ')
答案 1 :(得分:1)
在CASE
子句中使用WHERE
语句。您可以找到示例here。
我在MySQL中尝试了以下代码并且它可以工作:
SET @param = 'purchase';
SELECT * FROM TEST.ACCOUNT
WHERE CASE
WHEN @param = 'redeem' THEN BALANCE < 0
WHEN @param = 'purchase' THEN BALANCE >= 0
ELSE TRUE
END;
答案 2 :(得分:0)
这可以解决这个问题吗?
WHERE
(purchase is not null && balance >= 0)
OR
(redeem is not null && balance < 0)
答案 3 :(得分:0)
CASE WHEN param1 = 'redeem' THEN balance <= 0