如何为IN方法添加条件

时间:2019-06-19 12:26:54

标签: sql

我正在为公司使用某种自定义技术,因此必须使用'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})

2 个答案:

答案 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))