2009-07-07 6 views
0

Ich bin auf der Suche nach einer Möglichkeit, eine Datenbank mit mehreren SQL-Abfragen abzufragen und dann, wenn ich die Ergebnisse der Abfragen (in XML) habe, das separate XML zu einem XML-Dokument zusammenzuführen, Verwenden von umgekehrten Pfaden. Mein Grund dafür ist das Konzept der parallelen Details (gleiche Daten mit unterschiedlichen Manipulationen).Kombinieren von XML mit umgekehrten Pfaden

beispielsweise 3 Abfragen:

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

Abfrage 1 Ergebnisse:

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

Abfrage 2 Ergebnisse:

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

Abfrage 3 Ergebnisse:

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

gewünschte Ausgabe:

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

Das sieht aus wie es wäre einfach, aber meine SQL-Abfragen viele Kunden zurückgeben kann, und eine Menge von Bestellungen und Positionen, und ich muss passen können, sie alle auf.

Ich kann nicht eine SQL-Abfrage mit Joins verwenden, die alle diese Informationen auf einmal sammeln wird.

Hat jemand schon mal so etwas gesehen? Irgendwelche Ideen?

Danke.

+0

Sie sind darauf hindeutet, dass die SQL-Abfrage-Ergebnisse in XML sind? Dies ist kein Standard SQL nach meinem Wissen. Welcher Server ist das? – Jherico

Antwort

1

Dies wird Ihnen genau das, was Sie suchen,:

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

Wow, genau das suche ich. Das ist wirklich nett. Ich sehe, dass es eine Funktion für MS SQL ist. Leider muss ich PostgreSQL verwenden. In PostgreSQL kann ich die Funktion query_to_xml() verwenden, aber es gibt keinen FOR XML PATH. Hm ... irgendwelche anderen Ideen? – littleK

+0

Entschuldigung.Ich habe noch nie mit PostgreSQL gearbeitet. –

+1

Diese Frage wird direkt hier gestellt: http://stackoverflow.com/questions/664815/is-there-an-equalival-to-ms-sql-for-xml-path-in-other-database-products –

1

XML-Formatierung beiseite, es sieht so aus, als ob Sie die Werbebuchungsabfrage abfragen und die Bestell- und Kundentabellen dazu verbinden möchten.

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 

Sie Dies wird eine Ergebnismenge von Positionen geben, die die Bestellung und Kundeninformationen Inline hat. Wenn Sie einen Server-Funktion verwenden es, um XML zu machen, werden Sie wahrscheinlich etwas entlang der Linien von

<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-Klausel, da dieser Eingang

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; 

produziert (I erhalten habe eine andere Position hinzugefügt zu zeigen, wie das wäre generiert):

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

Diese nicht ist genau so, wie Sie es wollen, aber vielleicht ist es ein Anfang.

+0

S.S .: Das Datenbanksystem wurde geklärt * nachdem * diese Antwort gegeben wurde. SQL Server-Benutzer könnten jedoch auch hier enden, also lasse ich diese Antwort bestehen. – Tomalak