2017-06-30 19 views
0

表形式の結果からJSON/XMLを生成する必要があります。表形式のSQL結果からJSON/XMLを自動生成

SELECT * 
    FROM [Person] P 
    LEFT JOIN CAR C ON P.id = C.PersonId 
    FOR XML AUTO 

、結果として私は(箱から出して)を得る:例えばXMLのAUTO

FOR:MS SQL Serverでは機能であっ内蔵されて

非常にある
<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に類似したものがあるのでしょうか?

ありがとうございます。

答えて

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行)

+0

はいありがとう、私はこのアプローチを知っています。非常に大きなデータセットでどのように動作するのか知っていますか?私はサーバー上に8GBのRAMを持っているとしましょうが、結果は非常に大きな10 GBのXMLファイルです。 – Snorlax

+0

@スノーラックス - 生成されるXMLの最大サイズは1GBです。より長いXMLでは、クライアント側のソリューションを記述する必要があります。 –

関連する問題