簡體   English   中英

將 SQL 表導出為 XML

[英]Exporting SQL table as XML

我在 portgres 中有三個表,分別是 Customer、Download、Games,其中包含以下字段,

|-----------|
| Customer  |
|-----------|
|  cust_ID  |
|-----------|
|   name    |
|-----------|
|  country  |
|-----------|

|-----------|
| Download  |
|-----------|
|  cust_ID  |
|-----------|
|  game_ID  |
|-----------|
|  version  |
|-----------|

|-----------|
|   Games   |
|-----------|
|  game_ID  |
|-----------|
|   name    |
|-----------|
|   price   |
|-----------|

我需要將表數據導出為 xml 格式,如下所示,

<customers>
  <customer>
    <id>1</id>
    <name>value</name>
    <country>value</country>
    <games>
      <game>
        <game_id>1</game_id>
        <name>value</name>
        <price>value</price>
        <download_ver>value</download_ver>
      </game>
      <game>
        <game_id>3</game_id>
        <name>value</name>
        <price>value</price>
        <download_ver>value</download_ver>
      </game>
    </games>
  </customer>

我將在客戶表下有多個客戶實體。 節點下的列來自由 game_id 字段鏈接的下載表。

select XMLELEMENT(name "warehouses",
        XMLAGG(
            XMLELEMENT(name "warehouse",
                XMLFOREST(
                    w.w_id,
                    w.w_name,
                    w.w_country))))
                    FROM warehouse w

上面的代碼可以查詢倉庫節點,但是如何合並游戲節點呢?

演示:db<>小提琴

SELECT 
    xmlelement(name customers, 
        xmlagg(
            xmlelement(name customer, 
                xmlforest(cust_id, name, country, games)
            )
        )
    )
FROM (
    SELECT
        c.cust_id,
        c.name,
        c.country,
        xmlelement(name games, 
            xmlagg(
                xmlelement(name game, 
                    xmlforest(g.game_id, g.name, price)
                )
            )
        ) as games
    FROM
        customer c
    JOIN
        download d ON (c.cust_id = d.cust_id)
    JOIN
        games g ON (d.game_id = g.game_id)
    GROUP BY c.cust_id, c.name, c.country
    ORDER BY c.cust_id
) s

您需要兩個步驟,因為有兩個聚合:

在子查詢中,我們使用xmlagg將每個客戶的游戲聚合到一個xmlelement "games" 中。

在外部查詢中,我們將所有客戶(以及他們已經聚合的游戲)聚合到一個xmlelement “客戶”中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM