如何在子查询中访问“父”属性。
E.g。如果我有以下最小工作示例片段,我希望作为输出
“1,2:3”
然而
失败了ORA-904,T1.F1无效标识符。
现在我知道我可以重写这个完整的查询以使其正常工作,但是问这个的理由是:
MWE:
create table T1(F1 INTEGER);
create table T2(F2 INTEGER,F3 INTEGER);
insert into T1(F1) VALUES(1);
insert into T2(F2,F3) VaLUES(1,2);
insert into T2(F2,F3) VALUES(1,2);
insert into T2(F2,F3) VALUES(1,3);
select T1.F1,
(SELECT LISTAGG(A,':') WITHIN GROUP (ORDER BY A) from (select distinct(F3) as A froM T2 where F2 = T1.F1)) as B
from T1;
答案 0 :(得分:0)
1) Why can't I access the 'outer' attribute?
Oracle只允许子查询访问其直接父查询表...实际上,您正在尝试访问子查询的子查询中的主查询。
2) How can I access it with less modification
您的最内部子查询可以被删除,您可以应用正则表达式删除重复项,如下所示:
select
T1.F1,
(
SELECT REGEXP_REPLACE(
LISTAGG(F3,':') WITHIN GROUP (ORDER BY F3),
'([^:]+):(\1(:|$))+',
'\1\3'
)
from T2
where F2 = T1.F1
) as B
from T1;
此正则表达式找到任何非重复的标记(标记=在:
之前或行结束之前的数据)并检查下一个标记以查找任何重复,替换所找到的第一个非重复的所有匹配和:
如果它不是行尾。
3) I want to add a column without modyfing the outer query too much
这样您的外部查询就没有改变,因此您可以按照自己的方式进行管理。