在Redshift中带CASE的IN子句的多项值

在Redshift中带CASE的IN子句的多项值

问题描述:

我试图运行此查询,其中IN子句使用CASE来选择两种情况之间的值。在Redshift中带CASE的IN子句的多项值

问题出在硬编码值('aaa','bbb')。我无法在THEN中添加多个值,因此它充当常规的IN值。硬代码值将是动态的,因为我会为它传递一个变量。

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); 

此外,我用一个子查询选择内THEN来获得特定的硬代码值,但它也无济于事。使用单一的硬编码值显然与往常一样。

移动你CASEIN

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 end);属于你语句不是一个数组选项,它是一个列名,所以我认为这只是转化为kdo.field0=tb2.field0,因为如果前面的case选项为false,您想检查kdo.field0是否等于中的任何值这基本上是一个连接条件

+0

'asd'被用于测试目的。对不起,没有提到。这将被实际查询中的变量替换。您对tb2.field0的使用也将起作用,它将具有与原始查询中提到的类似的功能。感谢您的建议。我很震惊,我搞砸了这样一个简单的查询。 –

+0

@HarshitBhatt如果它是正确答案,请将其标记为已接受 – AlexYes