Sql IN子句的多个值,大小写为红移

Sql IN子句的多个值,大小写为红移,sql,amazon-redshift,Sql,Amazon Redshift,我正在尝试运行这个查询,where IN子句使用CASE在两个CASE之间选择值 问题在于硬编码值('aaa','bbb')。我不能在其中添加多个值,因此它在值中充当常规值。硬代码值将是动态的,因为我将为其传递一个变量 select kdo.field0 from tb1 data1 inner join tb2 kdo on kdo.field1 = 'xxx' and kdo.field2::DATE >='2017-08-01'::DATE and kdo.field0

我正在尝试运行这个查询,where IN子句使用CASE在两个CASE之间选择值

问题在于硬编码值('aaa','bbb')。我不能在其中添加多个值,因此它在值中充当常规值。硬代码值将是动态的,因为我将为其传递一个变量

select kdo.field0
from tb1 data1 inner join tb2 kdo
on kdo.field1 = 'xxx'
   and kdo.field2::DATE >='2017-08-01'::DATE
   and kdo.field0
       in (case when 'asd'!='' then 'aaa','bbb'
           else tb2.field0 end);

此外,我还使用了一个子查询selectinside-THEN来获取特定的硬代码值,但这也无济于事。使用单个硬编码值显然与往常一样有效。

将您的
案例
移到

select kdo.field0
from tb1 data1 inner join tb2 kdo
on kdo.field1 = 'xxx'
   and kdo.field2::DATE >='2017-08-01'::DATE
   and case when 'asd'!='' then kdo.field0 in ('aaa','bbb')
       else kdo.field0=tb2.field0 end;
但是我不知道你所说的“asd”是什么意思
因为
'asd'
是一个字符串,它将始终返回
true


另外,
else tb2.field0结束)部分不是数组选项,这是一个列名,所以我假设这只是转换为
kdo.field0=tb2.field0
,因为如果前面的case选项为false,您需要检查
kdo.field0
是否等于
tb2.field0
中的任何值,这基本上是一个连接条件,用于测试目的。很抱歉没提那件事。在实际查询中,它将被一个变量替换。您对tb2.field0的使用也将起作用,它将具有与原始查询中提到的类似的功能。谢谢你的建议。我把这么简单的问题搞砸了,我感到震惊。