首页 > 解决方案 > 查询相关记录到xml字段

问题描述

我必须查询一个巨大的数据库。对于每一行,包含上百个字段,在三个相关表中都有相关记录。加入它们将产生数十倍的记录集(取决于相关记录数)。我考虑过将相关表中的字段组合到单个 xml 字段中。

例如:Table1(主表):

Id        Field1        Field2    ...more fields go here
1         Value1        Value2
2         Value3        Value4

表2(相关表之一)

Id        ParentId      Field3        Field4
1         1             Value5        Value6
2         1             Value7        Value8
3         2             Value9        Value10

我想得到以下结果:

Id        Field1       Field2      XmlField1
1         Value1       Value2      XmlValue1
2         Value3       Value4      XmlValue2

其中 XmlValue1 如下

<RelatedRecords>
   <RelatedRecord>
       <Field3>
           Value5
       </Field3>
       <Field4>
           Value6
       </Field4>
   </RelatedRecord>
   <RelatedRecord>
       <Field3>
           Value7
       </Field3>
       <Field4>
           Value8
       </Field4>
   </RelatedRecord>
</RelatedRecords>

而XmlValue2如下

<RelatedRecords>
   <RelatedRecord>
       <Field3>
           Value
       </Field3>
       <Field4>
           Value10
       </Field4>
   </RelatedRecord>
</RelatedRecords>

如何获得所需的输出?

标签: sqlsql-serverxmlquerying

解决方案


自己解决了。为他人提供所需的解决方案:

SELECT Id, 
       Field1,
       Field2,
       (
       SELECT Field3, Field4
       FROM Table2
       WHERE Table1.Id = Table2.ParentId
       FOR XML PATH('RelatedRecord'), ROOT('RelatedRecords')
       ) XmlField1
FROM Table1

推荐阅读