我的表格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子句查询吗? 如果不是,解决方案是什么?
答案 0 :(得分:-1)
内部联接必须在这里工作..你可以使用这个
在tableB.columnB = tableA.columnA上从tableB内部联接tableA中选择columnC;
你可以在这里看到结果