我正在尝试运行此查询,其中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中使用了一个子查询选择来获取特定的硬代码值,但它也无济于事。使用单个硬编码值显然可以正常工作。
答案 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
中基本上是连接条件的任何值