LEFT JOIN avec FOR XML AUTO, ELEMENTS

J'ai 3 tables

Master {MasterID, Desc}, Detail {MasterID, DetailID, ItemID}, Items {ItemID, ItemDesc}) 

Je veux sélectionner le maître, le détail (comme sous-élément dans le maître), l'élément (dans le même élément de détail)

 SELECT Master.MasterID, Master.Desc, Detail.DetailID, Detail.ItemID, Items.ItemDesc FROM Master LEFT JOIN Detail LEFT JOIN Items ON Detail.ItemID = Items.ItemID ON Master.MasterID = Detail.MasterID FOR XML AUTO, ELEMENTS 

il donne le résultat ci-dessous:

 <Master> <MasterID>1</MasterID> <Desc>Master1</Desc> <Detail> <DetailID>1</DetailID> <ItemID>1</ItemID> <Items><ItemDesc>ItemDesc1</ItemDesc></Items> </Detail> </Master> 

Mais ma cible est

 <Master> <MasterID>1</MasterID> <Desc>Master1</Desc> <Detail> <DetailID>1</DetailID> <ItemID>1</ItemID> <ItemDesc>ItemDesc1</ItemDesc> </Detail> </Master>' 

Comment puis-je faire cela avec les meilleures pratiques?

Faites en sorte que le détail et la description de l'article reviennent d'une seule requête, comme ceci:

 SELECT Master.MasterID, Master.Desc, Detail.DetailID, Detail.ItemID, Detail.ItemDesc FROM Master LEFT JOIN ( select d.MasterID, d.DetailID, d.ItemID, i.ItemDesc from Detail d left join items i on d.itemid = i.itemid ) Detail ON Master.MasterID = Detail.MasterID FOR XML AUTO, ELEMENTS 

Vous pouvez utiliser for xml path comme ceci.

 select m.MasterID, m.[Desc], (select d.DetailID, d.ItemID, i.ItemDesc from Detail as d inner join Items as i on d.ItemID = i.ItemID where d.MasterID = m.MasterID for xml path('Detail'), type) from Master as m for xml path('Master')