sql - 查询相关记录到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>
如何获得所需的输出?
解决方案
自己解决了。为他人提供所需的解决方案:
SELECT Id,
Field1,
Field2,
(
SELECT Field3, Field4
FROM Table2
WHERE Table1.Id = Table2.ParentId
FOR XML PATH('RelatedRecord'), ROOT('RelatedRecords')
) XmlField1
FROM Table1
推荐阅读
- networking - omnet 可以比 express 模式运行得更快吗?
- python - 如何计算列表中子列表的出现次数并将其显示为 dict
- c - 将节点添加到列表的问题
- flutter - Flutter Webview - 键盘不会自动关闭
- apache-kafka - 覆盖 KStreams 默认序列化器 (ByteArraySerializer)
- php - 我无法在其创建过程中自动添加用户 ID - Symfony 5
- spring-batch - Spring Batch:这有模式吗?
- javascript - AJAX PHP 调用请求无响应
- python - 根据字符串生成数字
- unit-testing - 允许 jest 模拟从测试文件外部调用的函数的幕后发生了什么?