大佬教程收集整理的这篇文章主要介绍了如何使用PostgreSQL将一对多关系呈现给XML,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以将查询结果作为XML来反映一对多结构?所以,结果应该是这样的:
<package id=1> <taskgroup id=1> <task id=1> <task id=2> </taskgroup> <taskgroup id=2> <task id=3> </taskgroup> </package>
通过使用XMLELEMENT()和XMLATTRIBUTE()函数来获取所有任务,我设法获得了我想要的一部分.像这样:
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
问题是如何将这些任务分组到其父表元素中?
SELECT p.id as pack_id,XMLELEMENT(name taskgroup,XMLATTRIBUTES(tg.id as id),@R_274_6353@(XMLELEMENT(name task,XMLATTRIBUTES(t.id as id)) as xml_task_group FROM packages p JOIN package_taskgroup pt ON p.id = pt.package_id JOIN taskgroups tg on pt.taskgroup_id = tg.id JOIN taskgroup_task tt on tg.id = tt.taskgroup_id JOIN tasks t on tt.task_id = t.id WHERE p.id = somePackagEID GROUP BY p.id,tg.id
这将为您指定的p.id提供所有任务组.
然后:
SELECT XMLELEMENT(name package,XMLATTRIBUTES(pack_id as id),@R_274_6353@(xml_task_group)) FROM (previous SELECT herE)
这将为您提供您指定的结构.
加入选择将如下所示:
SELECT XMLELEMENT(name package,@R_274_6353@(xml_task_group)) FROM (SELECT p.id as pack_id,XMLATTRIBUTES(t.id as id) ))) as xml_task_group FROM packages p JOIN package_taskgroup pt ON p.id = pt.package_id JOIN taskgroups tg on pt.taskgroup_id = tg.id JOIN taskgroup_task tt on tg.id = tt.taskgroup_id JOIN tasks t on tt.task_id = t.id WHERE p.id = somePackagEID GROUP BY p.id,tg.id) t GROUP BY pack_id
我只是将第一个SELEct复制到第二个的FROM子句中.
以上是大佬教程为你收集整理的如何使用PostgreSQL将一对多关系呈现给XML全部内容,希望文章能够帮你解决如何使用PostgreSQL将一对多关系呈现给XML所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。