2012-03-29 128 views
2

我想執行下列SQL:從兩個表中選擇一個XML

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 

這只是正常的,但因爲我想要得到的結果以XML格式,不得不投地理列,我已經改變了第一行:

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

,並添加此行到最後:

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

現在我剛開g XML,但只有來自Table2的數據。
任何建議將受到歡迎。

+0

什麼RDBMS? [Oracle的XMLAgg](http://docs.oracle.com/cd/B19306_01/appdev.102/b14259/xdb13gen.htm#i1031169),[DB2的XMLAgg](http://publib.boulder.ibm.com/infocenter /db2luw/v9/index.jsp?topic=%2Fcom.ibm.db2.udb.admin.doc%2Fdoc%2Fr0022183.htm)或[XMLGroup](http://publib.boulder.ibm.com/infocenter/db2luw /v9r5/index.jsp?topic=%2Fcom.ibm.db2.luw.sql.ref.doc%2Fdoc%2Fr0050588.html),... – Aprillion 2012-03-29 08:38:50

+0

表2中的名稱,描述和位置都是?我可能會錯過一些東西,但看起來你在select語句中沒有來自表1的列,因爲它們不會出現在XML中? – GarethD 2012-03-29 10:04:06

+0

是的,他們是。在第3行,我選擇了表1中的數據,並將它們添加到結果中。事情是,第一個腳本工作得很好,這是第一行的分解做了差異。 – toy4fun 2012-03-29 10:25:47

回答

0

顯然,如果你想顯示其他表格的數據,那麼你必須選擇這樣的列。 IO通常使用MYSQL,所以這是我通常使用的方式。但是如果您使用的是oracle或其他數據庫,那麼您必須選擇適當的別名來顯示您希望的自定義​​列。請參見使用sql server的基本示例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

我正在使用SQL Server 2010.將表名添加到每個列都沒有幫助。正如我寫的,第一個腳本工作正常。不同之處在於第1行,而不是選擇我將它分解爲單列的所有內容。 – toy4fun 2012-03-29 09:01:35

+0

是的,我已經說過了,我用這種方式進行MYSQL,對於sql server你必須看到一些例子[http://www.java2s.com/Code/SQLServer/Table-Joins/Columnaliasintablejoin.htm] – Java 2012-03-29 09:05:26

+0

I編輯我的答案去鏈接,會幫助你。告訴我,如果它適合你。 – Java 2012-03-29 09:12:57