我正在为公司使用某种自定义技术,因此必须使用'IN'子句创建查询,但是我只能发送动态参数来查询,而不能以任何其他方式操作查询(例如在前面连接查询字符串)
我试图实现的是过滤值列表(使用'IN'子句)。 “ IN”的值列表全部在外部参数中,可以为null或某些值列表。
这是一个简化的查询:
select * from TABLE where COLUMN1='something'
and COLUMN2 in ({dynamic_paramater})
我想在{dynamic_paramater}不为null时过滤值,并在该参数为null时列出所有值(例如查询中根本不存在“ IN”子句)。
我想做这样的事情(显然语法是错误的)
select * from TABLE where COLUMN1='something'
if {dynamic_paramater} is not null then
and COLUMN2 in ({dynamic_paramater})
答案 0 :(得分:3)
您可以使用此查询
SELECT * FROM table WHERE COLUMN1='something'
AND ({dynamic_parameter} IS NULL OR COLUMN in ({dynamic_parameter}) );
但是您必须根据情况将NULL
赋予{dynamic_parameter}
。
答案 1 :(得分:0)
您可以使用coalesce()
select * from TABLE where COLUMN1='something'
and (COLUMN2 in ( coalesce(dynamic_paramater,-99999))
如果dynamic_paramater为空,则设置的值始终为假,我已将其固定为-99999-我猜-99999永远不会出现在您的column2中
如果第一个条件为真,第二个条件为假,那么您在查询中就没有任何信息,那么如果您需要数据然后需要或条件会发生什么情况
select * from TABLE where COLUMN1='something'
or (COLUMN2 in ( coalesce(dynamic_paramater,-99999))