选择带子的查询

时间:2016-07-21 04:43:34

标签: sql oracle

当我为两个表编写select查询时,我想建议如何编写查询。

下面,有两个表(伪ddl)。

CREATE PARENT(
IDX int primary key,
NAME varchar2(40)
)

CREATE CHILD(
PARENT_IDX int,
NAME varchar2(40)
)

这是表的状态。

家长:

IDX    / NAME
1      / PARENT1
2      / PARENT2
3      / PARENT3

子:

PARENT_IDX /  NAME 
1          / CHILD1
1          / CHILD2
2          / CHILD3
3          / CHILD4
3          / CHILD5
3          / CHILD6

我想在jsp页面中打印包含所有子项的父列表,如下所示:

IDX    / NAME       /CHILD
1      / PARENT1    /CHILD1,CHILD2
2      / PARENT2    /CHILD3
3      / PARENT3    /CHILD4,CHILD5,CHILD6

在Oracle中使用SQL的最佳解决方案是什么?

1 个答案:

答案 0 :(得分:1)

如果您使用的是Oracle 11g或更高版本,则可以将父表和子表连接在一起,并使用LISTAGG()获取所需的CSV格式:

SELECT p.IDX,
       p.NAME,
       LISTAGG(COALESCE(c.NAME, 'NA'), ',') "CHILD"
FROM PARENT p
LEFT JOIN CHILD c
    ON p.IDX = c.PARENT_IDX
GROUP BY p.IDX