2009-07-07 41 views
0

我正在尋找一種方法,可以使用多個SQL查詢來查詢數據庫,然後在查詢結果(以XML格式)將單獨的XML合併到一個XML文檔中後,使用反向路徑。我這樣做的理由與平行細節的概念有關(相同的數據,應用了不同的操作)。將XML與反向路徑結合

例如,3個查詢:

SELECT * FROM Customer; 
SELECT * FROM Purchase_order; 
SELECT * FROM Line_Item; 

查詢1個結果:

<customer> 
    <cust_id>2</cust_id> 
    <fname>John</fname> 
    <lname>Doe</lname> 
</customer> 

查詢2個結果:

<purchase_order> 
    <order_id>2</order_id> 
    <cust_id>2</cust_id> 
    <shipped>7/7/2009</shipped> 
</purchase_order> 

查詢3個結果:

<line_item> 
    <line_id>2</line_id> 
    <order_id>2</order_id> 
    <quantity>7</quantity> 
</line_item> 

所需的輸出:

<collection> 
    <customer> 
    <cust_id>2</cust_id> 
    <fname>John</fname> 
    <lname>Doe</lname> 
    </customer> 
    <purchase_order> 
    <order_id>2</order_id> 
    <cust_id>2</cust_id> 
    <shipped>7/7/2009</shipped> 
    </purchase_order> 
    <line_item> 
    <line_id>2</line_id> 
    <order_id>2</order_id> 
    <quantity>7</quantity> 
    </line_item> 
</collection> 

這看起來很容易,但我的SQL查詢可以返回大量的客戶,以及大量採購訂單和項目,我需要能夠匹配他們都起來了。

我不能使用一個SQL查詢與聯合,將一次收集所有這些信息。

有沒有人見過這樣的事情?有任何想法嗎?

謝謝。

+0

你這表明SQL查詢結果是XML?據我所知,這不是標準的SQL。這是什麼服務器? – Jherico 2009-07-07 17:21:12

回答

1

這會給你你正在尋找什麼:

SELECT 
    CONVERT(XML, 
     (SELECT cust_id, fname, lname FROM Customer FOR XML PATH('customer'))), 
    CONVERT(XML, 
     (SELECT order_id, cust_id, shipped FROM Purchase_order FOR XML PATH('purchase_order'))), 
    CONVERT(XML, 
     (SELECT line_id, order_id, quantity FROM Line_Item FOR XML PATH('line_item'))) 
FOR XML PATH('collection') 
+0

哇,這正是我正在尋找的。這真的很好。我發現它是MS SQL的一個特性。不幸的是,我不得不使用PostgreSQL。在PostgreSQL中,我可以使用query_to_xml()函數,但沒有FOR XML PATH。嗯...其他想法? – littleK 2009-07-07 18:10:28

1

除了格式化XML之外,它看起來像是要查詢訂單項表並在其上加入採購訂單和客戶表。

SELECT * FROM Line_Item li 
    join Purchase_Order po on li.order_id on po.order_id 
    join Customer c = po.cust_id on c.cust_id 

這會爲您提供一組結果中包含採購訂單和客戶信息的訂單項。如果您使用的服務器功能,使它對XML,你可能會得到沿着

<line_item> 
    <line_id>2</line_id> 
    <quantity>7</quantity> 
    <order_id>2</order_id> 
    <shipped>7/7/2009</shipped> 
    <fname>John</fname> 
    <lname>Doe</lname> 
</line_item> 
1

SQL Server的FOR XML子句,鑑於此輸入

SELECT 
    * 
FROM 
    Customer 
    INNER JOIN Purchase_order ON Purchase_order.cust_id = Customer.cust_id 
    INNER JOIN Line_Item  ON Line_Item.order_id = Purchase_order.order_id 
FOR XML AUTO, ELEMENTS; 

產生(我的東西線已經添加其他訂單項進行展示如何將生成):

<Customer> 
    <cust_id>2</cust_id> 
    <fname>John</fname> 
    <lname>Doe</lname> 
    <Purchase_order> 
    <order_id>2</order_id> 
    <cust_id>2</cust_id> 
    <shipped>2009-07-07T00:00:00</shipped> 
    <Line_Item> 
     <line_id>2</line_id> 
     <order_id>2</order_id> 
     <quantity>7</quantity> 
    </Line_Item> 
    <Line_Item> 
     <line_id>3</line_id> 
     <order_id>2</order_id> 
     <quantity>1</quantity> 
    </Line_Item> 
    </Purchase_order> 
</Customer> 

這不正是想要的方式,但也許它是一個開始。

+0

P.S .:在給出這個答案後,數據庫系統得到澄清。但是,SQL Server人員也可能會在這裏結束,所以我讓這個答案保持不變。 – Tomalak 2009-07-08 09:01:05