需要来自 Oracle SQL 查询的父表和子表的 XML

Posted

技术标签:

【中文标题】需要来自 Oracle SQL 查询的父表和子表的 XML【英文标题】:Need XML from parent and child table from Oracle SQL query 【发布时间】:2021-11-18 02:05:56 【问题描述】:

在我正在处理的一个项目中,我们需要创建一个 XML 并将其传递给一个接口,我在创建一个包含来自父表及其后续子表的数据的 XML 时遇到了问题。

父表:- 部门应该是这样的

dept_id     dept_name
1           History
2           Biology

儿童表:- 员工应该是这样的

emp_id      emp_name     dept_id
1           Helen         1
2           Martha        1 
3           John          1
4           Carol         2

所以生成的 XML 应该类似于部门 id=1

`<department>
<dept_id>1</dept_id>
<dept_name>History</dept_name>
</department>
<employee>
<emp_id>1</emp_id>
<emp_name>Helen</emp_name>
</employee>
<employee>
<emp_id>2</emp_id>
<emp_name>Martha</emp_name>
</employee>
<employee>
<emp_id>3</emp_id>
<emp_name>John</emp_name>
</employee>'

如果有人知道这样做的更好方法,那将有很大帮助。 提前致谢

【问题讨论】:

比什么更好的方法?你现在在做什么,你有什么问题?您还有一个 XML 片段,而不是一个有效的文档 - 没有根节点。您确定这就是您要查找的格式吗? 【参考方案1】:

类似这样的(员工节点在部门节点中,所以它不是片段):

SELECT XMLELEMENT(
         "department",
         XMLFOREST(
           e.dept_id AS "dept_id",
           d.dept_name AS "dept_name"
         ),
         XMLAGG(
           XMLELEMENT(
             "employee",
             XMLFOREST(
               emp_id AS "emp_id",
               emp_name AS "emp_name"
             )
           )
         )
       )
FROM   employees e
       INNER JOIN departments d
       on ( e.dept_id = d.dept_id )
WHERE  e.dept_id = 1
GROUP BY e.dept_id, d.dept_name;

【讨论】:

非常感谢...我只是在寻找这种查询。 @user1654571 如果此答案或任何其他答案回答了您的问题,您可以将其标记为已接受(勾选答案左侧投票按钮下方的绿色复选标记) - 这会让其他用户知道您的问题已解决。 再次感谢...完成并感谢您帮助新手 :)

以上是关于需要来自 Oracle SQL 查询的父表和子表的 XML的主要内容,如果未能解决你的问题,请参考以下文章

什么是数据库中的父表和子表?

Laravel:使用同步或 updateOrCreate 更新父表和子表?

什么是父表和子表

从父表和子表中删除行

主表和子表是一对多,查询主表数据以及子表的某一条数据

如何将父表和子表数据移动到存档表(具有相同的列)