DB2拆分逗号分隔String以在IN子句中使用.Update:IN子句内的WITH子句查询

时间:2016-05-26 13:57:46

标签: string db2

我的表格TableA的值为ColumnA,如下所示:

ColumnA
__________________
a,b,c
d,e

我的表TableB的值为:

ColumnB     ColumnC
____________________
a            1
b            2
c            3
d            4
e            5
x            9

我想在另一个查询中使用上面的值:

SELECT columnC FROM TableB where ColumnB in (select ColumnA from TableA)

显然上面的查询不起作用。

输出应为1,2,3,4,5。

如何在没有功能的情况下执行此操作,即在简单查询中?

更新

根据下面的mustoccio的评论,我使用WITH子句使其工作:

With split_data as (select ColumnA as split_string, ',' as split from TableA),
rec
(
   split_string, split, row_num, column_value, pos
)
as
(
   select
   split_string,
   split,
   1,
   varchar(substr(split_string, 1, decode(instr(split_string, split, 1),0,length(split_string), instr(split_string, split, 1)-1)), 255),
   instr(split_string, split, 1) + length(split)
   from split_data
   union
   all
   select
   split_string,
   split,
   row_num+1,
   varchar(substr(split_string, pos, decode(instr(split_string, split, pos),0, length(split_string)-pos+1, instr(split_string, split, pos)-pos)), 255),
   instr(split_string, split, pos)+length(split)
   from rec
   where row_num < 300000
   and pos > length(split)
)
select
column_value as data
from rec
order by row_num

但是,当我尝试在查询的IN子句中使用上面的查询时:

SELECT columnC FROM TableB where ColumnB in (/* WITH query here */)

我收到错误:

Error: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=as;in ( With split_data;JOIN, DRIVER=3.50.152
SQLState:  42601
ErrorCode: -104
Error: DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-104;42601;as|in ( With split_data|JOIN, DRIVER=3.50.152
SQLState:  56098
ErrorCode: -727

我们不能在IN子句中使用WITH子句查询吗? 如果不是,解决方案是什么?

1 个答案:

答案 0 :(得分:-1)

内部联接必须在这里工作..你可以使用这个

在tableB.columnB = tableA.columnA上从tableB内部联接tableA中选择columnC;

enter image description here

你可以在这里看到结果