由于Oracle中的select语句而以逗号分隔的列表

bra*_*age 4 sql oracle subquery string-aggregation

我有一张名为"人"的桌子.它包含person的id和它的父id(只有一个父级是可能的).作为查询的结果,我想要一个包含第一列的表 - 一个人ID,第二列 - 一个包含它的子ID的列表.怎么做到这一点?我已经阅读过listagg函数,但我不确定它是否适合我的目的.此查询生成一个空的第二列:

从人t1中选择t1.id,(从人t2中选择t2.id,其中t2.parent_id = t1.id),其中t1.status ='parent';

Mar*_*ker 8

SELECT parent_id,
       RTRIM(XMLAGG(XMLELEMENT(e,child_id || ',')).EXTRACT('//text()'),',') AS "Children"
  FROM parentChildTable
 WHERE parent_id = 0
 GROUP BY parent_id
Run Code Online (Sandbox Code Playgroud)

要么

SELECT parent_id,
       LISTAGG(child_id, ',') WITHIN GROUP (ORDER BY child_id) AS "Children"
  FROM parentChildTable
 WHERE parent_id = 0
 GROUP BY parent_id
Run Code Online (Sandbox Code Playgroud)