我的架构中有几个多对多关系。例如,一个包有许多任务组,而任务组又具有许多任务。所有表通过多对多表链接在一起,例如包含包的主键和任务组的主键。(我知道这不是严格需要的,因为 XML 是一对多的,但我想不出更好的结构)。
是否可以将查询结果作为 XML 获取,反映一对多的结构?所以,结果应该是这样的:
<package id=1>
<taskgroup id=1>
<task id=1>
<task id=2>
</taskgroup>
<taskgroup id=2>
<task id=3>
</taskgroup>
</package>
XMLELEMENT()
通过使用andXMLATTRIBUTE()
函数来完成所有任务,我已经设法获得了我想要的部分内容。像这样:
SELECT XMLELEMENT(name task,
XMLATTRIBUTES(p.name as packageName),
XMLELEMENT(name description, t.description),
XMLELEMENT(name tutorial,
XMLELEMENT(name someTaskChild1, t.data1)),
XMLELEMENT(name objectives,
XMLELEMENT(name someTaskChild2, t.data2)),
)
FROM packages p
INNER JOIN package_taskgroup pt ON p.id = pt.package_id
INNER JOIN taskgroups tg on pt.taskgroup_id = tg.id
INNER JOIN taskgroup_task tt on tg.id = tt.taskgroup_id
INNER JOIN tasks t on tt.task_id = t.id
WHERE p.id = somePackageId AND tg.id = someTaskGroupId
问题是如何将这些任务分组到它们的父表元素中?