首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oracle sql中的listagg

oracle sql中的listagg
EN

Stack Overflow用户
提问于 2021-05-02 19:39:47
回答 2查看 36关注 0票数 0

我在Oracle中有以下sql查询:

代码语言:javascript
复制
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中得到了重复的结果,这是我不想要的。我怎么才能修复它呢?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2021-05-02 19:45:26

在Oracle19之前,Oracle不支持用于listagg()distinct

然而,在您的例子中,问题可能是由joins的笛卡尔乘积引起的。这表明相关子查询是更好的方法:

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2021-05-02 19:47:10

Listagg函数不支持distinct选项。您应该使用子查询来选择唯一值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67355933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档