2012-03-29 12 views
2

Ich versuche, die folgende SQL auszuführen:aus zwei Tabellen in einer XML-Auswahl

SELECT * FROM Table2 
INNER JOIN 
    (SELECT * FROM Table1 
    INNER JOIN 
    (SELECT MAX(DateTime) AS LastMeasurement, MeasurementId as LastMeasurementId 
    FROM Table1 GROUP BY MeasurementId) as lastMeasurement 
    ON (Table1.MeasurementId = lastMeasurement.LastMeasurementId) 
    AND (Table1.DateTime = lastMeasurement.LastMeasurement)) as hLastMeasurement 
ON Table2.Id = hLastMeasurement.Id 
ORDER BY Table2.Id ASC 

Dies funktioniert gut, aber weil ich das Ergebnis im XML-Format erhalten möchten und hatte die Geographie Säule zu werfen , ich habe die erste Zeile geändert:

SELECT Name, Description, CAST(Location as nvarchar(MAX)) FROM Table2 

und hinzugefügt, um diese Zeile am Ende:

FOR XML RAW ('Object'), ROOT ('Objects'), ELEMENTS 

Jetzt gettin ich bin g das XML, aber nur mit Daten aus Table2.
Jeder Ratschlag ist willkommen.

+0

was RDBMS? [Oracle XMLAGG] (http://docs.oracle.com/cd/B19306_01/appdev.102/b14259/xdb13gen.htm#i1031169), [die DB2-XMLAGG] (http://publib.boulder.ibm.com/infocenter /db2luw/v9/index.jsp?topic=%2Fcom.ibm.db2.udb.admin.doc%2Fdoc%2Fr0022183.htm) oder [XMLGROUP] (http://publib.boulder.ibm.com/infocenter/db2luw /v9r5/index.jsp?topic=%2Fcom.ibm.db2.luw.sql.ref.doc%2Fdoc%2Fr0050588.html), ... – Aprillion

+0

Sind Name, Beschreibung und Standort alle in Tabelle 2? Ich vermisse etwas, aber es sieht so aus, als hätten Sie in Ihrer SELECT-Anweisung keine Spalten aus Tabelle 1, weshalb sie nicht in der XML-Datei erscheinen. – GarethD

+0

Ja, das sind sie. In Zeile 3 wähle ich die Daten aus Tabelle 1 aus und füge sie zum Ergebnis hinzu. Die Sache ist, dass das erste Skript gut funktioniert, es ist der Zusammenbruch der ersten Zeile, der den Unterschied gemacht hat. – toy4fun

Antwort

0

Selbstverständlich, wenn Sie Daten anzuzeigen aus anderen Tabellen wollen, dann müssen Sie diese Spalten wie auf diese Weise wählen. IO normalerweise MYSQL verwenden, so ist dies die Art, wie ich normalerweise use.But Wenn Sie Oracle oder andere Datenbank verwenden, dann haben Sie die richtige Alias-Namen wählen benutzerdefinierte Spalten angezeigt werden, die Sie grundsätzliches Beispiel wish.see für die Verwendung von SQL Server verbinden here

SELECT Table2.Name,Table2.Description,lastMeasurement.MeasurementId 

FROM Table2 t2 
    INNER JOIN 
     (SELECT * FROM Table1 
     INNER JOIN 
     (SELECT MAX(DateTime) AS LastMeasurement, MeasurementId as LastMeasurementId 
     FROM Table1 GROUP BY MeasurementId) as lastMeasurement 
     ON (Table1.MeasurementId = lastMeasurement.LastMeasurementId) 
     AND (Table1.DateTime = lastMeasurement.LastMeasurement)) as hLastMeasurement 
    ON Table2.Id = hLastMeasurement.Id 
    ORDER BY Table2.Id ASC 
+0

Ich verwende SQL Server 2010. Das Hinzufügen des Tabellennamens zu jeder Spalte hilft nicht. Wie ich geschrieben habe, funktioniert das erste Skript gut. Der Unterschied ist in Zeile 1, anstatt nur alles auszuwählen, was ich in einzelne Spalten zerlege. – toy4fun

+0

ja richtig, ich habe schon gesagt, ich benutze diese Weise für MYSQL, für SQL Server müssen Sie einige Beispiele siehe [http://www.java2s.com/Code/SQLServer/Table-Joins/Columnaliasintablejoin.htm] – Java

+0

I habe meine Antwort bearbeitet, um zu verlinken, wird dir helfen. Sag mir, wenn es für dich funktioniert. – Java

Verwandte Themen