簡體   English   中英

如何從sql中的xml檢索所有父元素的所有子元素

[英]How to retrieve all child elements for all parent elements from xml in sql

<people>
<parent>
  <parent-name> joel </parent-name>
  <child> john </child>
  <child> sara </child>
  <child> ram </child>
</parent>

<parent>
  <parent-name> sam </parent-name>
  <child> david </child>
  <child> george </child>
  <child> wilson </child>
</parent>
</people>

所需的輸出是:

parent  |  child
--------|---------
joel    |  john
joel    |  sara
joel    |  ram
sam     |  david
sam     |  george
sam     |  wilson

我嘗試了以下sql查詢來檢索所有父元素的所有子元素,只有我可以得到第一個子元素

select a.b.value('parent-name[1]','varchar(50)') as parent
      , a.b.value('child[1]' ,'varchar(50)') as child
from @myxml.nodes('people/parent')a(b)

您需要在每個父節點的<child>節點上使用CROSS APPLY.nodes()

SELECT
    a.b.value('(parent-name)[1]', 'varchar(50)') as parent, 
    XChild.value('.' ,'varchar(50)') as child
FROM
    @myxml.nodes('people/parent') AS a(b)
CROSS APPLY
    b.nodes('child') AS XTbl(XChild)    

這將使所有父母帶着他們所有的孩子回歸。

訣竅是迭代孩子,然后上升一級並獲得父名。

select a.b.value('(../parent-name)[1]','varchar(50)') as parent
  , a.b.value('(.)[1]' ,'varchar(50)') as child
from @myxml.nodes('people/parent/child')a(b)

嘗試這個。

select 
tbl.col.value('parent::*/@parent-name', 'varchar(50)') AS ParentName,
tbl.col.value('@child', 'varchar(50)') AS ChildName
from @x.nodes('/people/parent/child') as tbl(col);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM