我需要从表格结果生成JSON / XML。在MS SQL Server中有内置函数:FOR XML AUTO
例如:
SELECT *
FROM [Person] P
LEFT JOIN CAR C ON P.id = C.PersonId
FOR XML AUTO
因此我得到(开箱即用):
<P id="1" Name="jan">
<C id="1" Name="toyota" Type="osobowyu" PersonId="1" />
<C id="2" Name="vw" Type="osobowyu" PersonId="1" />
</P>
<P id="2" Name="adam">
<C id="3" Name="passat" Type="test" PersonId="2" />
</P>
<P id="3" Name="piotr">
<C id="4" Name="kia" Type="test" PersonId="3" />
</P>
哪个很酷。我喜欢嵌套级别为每个JOIN自动显示。很酷的功能。
现在我想知道postgres DB是否有类似内容?
感谢任何提示。
答案 0 :(得分:1)
不,Postgres没有任何相似之处。有完整的ANSI SQL / XML支持和部分ANSI SQL / JSON支持。当您需要ganerate XML文档时,可以使用XML生成函数,如:
postgres=# select * from person; ┌────┬───────┐ │ id │ name │ ╞════╪═══════╡ │ 1 │ jan │ │ 2 │ piotr │ └────┴───────┘ (2 rows) postgres=# select * from car; ┌────┬────────┬──────────┐ │ id │ name │ personid │ ╞════╪════════╪══════════╡ │ 1 │ toyota │ 1 │ │ 2 │ vw │ 1 │ │ 3 │ kia │ 2 │ └────┴────────┴──────────┘ (3 rows)
select xmlelement(name p, xmlattributes(p.id, p.name),
xmlagg(xmlelement(name c, xmlattributes(c.id,
c.name,
c.personid))))
from person p join car c on p.id = c.personid
group by p.id, p.name;
┌───────────────────────────────────────────────────────────────────────────────────────────────────┐
│ xmlelement │
╞═══════════════════════════════════════════════════════════════════════════════════════════════════╡
│ <p id="1" name="jan"><c id="1" name="toyota" personid="1"/><c id="2" name="vw" personid="1"/></p> │
│ <p id="2" name="piotr"><c id="3" name="kia" personid="2"/></p> │
└───────────────────────────────────────────────────────────────────────────────────────────────────┘
(2行)