我有3个表:table_A,table_B和table_C。Table_A具有主键,并由table_B中的外键引用。Table_C具有一个主键,该主键由来自table_B的外键引用。设计是这样的:
T̲a̲b̲l̲e̲_̲A̲
ID_A
TextData
T̲a̲b̲l̲e̲_̲B̲:
ID_B
ID_A
ID_C
T̲a̲b̲l̲e̲ ̲C̲:
ID_C
TextData
查询:
select a.id_a,
a.textdata,
listagg(c.textdata, ', ') within group (order by c.id_c) data_c
from table_a a
inner join table_b b on (a.id_a = b.id_a)
inner join table_c c on (b.id_c = c.id_c)
where c.textdata like :data
group by a.id_a, a.textdata;
我只是从c.textdata的一个表中获取数据,而不是从listagg获取数据。如果我尝试使用此查询:
select a.id_a,
a.textdata,
listagg(c.textdata, ', ') within group (order by c.id_c) data_c
from table_a a
inner join table_b b on (a.id_a = b.id_a)
inner join table_c c on (b.id_c = c.id_c)
where listagg(c.textdata, ', ') like :data
group by a.id_a, a.textdata;
我收到类似以下错误:此处不允许使用组功能
因为我需要来自listagg的数据,如何对listagg参数赋予条件?
您可以尝试包装查询:
select *
from (
select a.id_a,
a.textdata,
listagg(c.textdata, ', ') within group (order by c.id_c) data_c
from table_a a
inner join table_b b on (a.id_a = b.id_a)
inner join table_c c on (b.id_c = c.id_c)
group by a.id_a, a.textdata
)
where data_c like :data
或使用HAVING在LISTAGG建立的字段上应用条件:
select a.id_a,
a.textdata,
listagg(c.textdata, ', ') within group (order by c.id_c) data_c
from table_a a
inner join table_b b on (a.id_a = b.id_a)
inner join table_c c on (b.id_c = c.id_c)
group by a.id_a, a.textdata
having listagg(c.textdata, ', ') within group (order by c.id_c) like :data
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句