在Redshift中使用CASE的IN子句的多重值

时间:2017-08-31 19:24:49

标签: sql amazon-redshift

我正在尝试运行此查询,其中IN子句使用CASE在两种情况之间选择值。

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

function reverse(arr) {
  for(var i = 0, j = arr.length-1; i < j; i++, j--) {
    var tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
  }
  return arr;
};

var reversed = reverse(['a','b','c','d','e']);
console.log(reversed);

此外,我在THEN中使用了一个子查询选择来获取特定的硬代码值,但它也无济于事。使用单个硬编码值显然可以正常工作。

1 个答案:

答案 0 :(得分:1)

CASE移到IN之外:

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,因为如果前一个案例选项为false,则您希望检查kdo.field0是否等于tb2.field0中基本上是连接条件的任何值