我正在使用Microsoft SQL Server。具有多个子元素的SQL查询分层XML
我有一个简单的层次结构像在XML中的定向图表:
DECLARE @XML as XML = CAST(
'<ROOT>
<NODE NODE_ID="1">
<EDGE>2</EDGE>
<EDGE>3</EDGE>
<EDGE>4</EDGE>
</NODE>
<NODE NODE_ID="2">
<EDGE>1</EDGE>
<EDGE>3</EDGE>
</NODE>
</ROOT>' AS XML);
我所需的输出会是这样的表:
SOURCE_NODE_ID | DEST_NODE_ID
1 | 2
1 | 3
1 | 4
2 | 1
2 | 3
的查询是这样的:
SELECT B.value('data(@NODE_ID)','int') AS SOURCE_NODE_ID,
A.B.value('(EDGE/text())[1]', 'int') AS DEST_NODE_ID
FROM @XML.nodes('/ROOT/NODE') AS A(B);
只返回第一边缘:
SOURCE_NODE_ID | DEST_NODE_ID
1 | 2
2 | 1
这人做一个好一点:
SELECT B.value('data(@NODE_ID)','int') AS SOURCE_NODE_ID,
B.query('EDGE').value('.', 'int') AS DEST_NODE_ID
FROM @XML.nodes('/ROOT/NODE') AS A(B);
只有它加到所有边缘到一个单元格:
SOURCE_NODE_ID | DEST_NODE_ID
1 | 234
2 | 13
我怎样才能得到我想要的结果?我应该加入一个内部查询或什么?可能我让它太复杂了,当然有一个简单的解决方案呢?
这是一个很好的问题:Copy'n'pasteable测试代码,自己的努力,预计输出,清晰的解释..如果只有所有的问题都是这样的:-)投了票! – Shnugo