如何在 Oracle 查询中使用 listagg 条件
How to use a condition on listagg on Oracle query
我有 3 个 table: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 中的一个 table 获取数据,而不是从 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
我有 3 个 table: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 中的一个 table 获取数据,而不是从 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