2012-03-29 101 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