繁体   English   中英

oracle sql 中的 listagg

[英]listagg in oracle sql

我在 Oracle 中有这个 sql 查询:

SELECT listagg(A.name, ",") within group (ORDER BY A.id) as A,
listagg(B.name, ",") within group (ORDER BY B.id) as B
FROM some_table
join A on A.id = some_table.id
join B.name = some_table.name
where some_table.status in (1,2,3)
group by some_table.id

我的问题是我从不想要的 listagg 中得到重复的结果。 我该如何解决? 谢谢!

Oracle 不支持listagg()distinct

但是,在您的情况下,问题可能是由于join的笛卡尔积引起的。 这表明相关子查询是一种更好的方法:

select t.*,
       (select listagg(a.name, ',') within group (order by a.id)
        from A a
        where a.id = t.id 
       ) as a,
       (select listagg(b.name, ',') within group (order by b.id)
        from B b
        where b.id = t.id 
       ) as b
from some_table t
where t.status in (1, 2, 3)
group by t.id;

Listagg function 不支持 distinct 选项。 您应该对 select 唯一值使用子查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM