我尝试从多个子表中的使用者父表和内部联接中选择数据,并将其作为XML返回。
我有Consumer父表和2个子表ConsumerPhone和Consumer Address。
我想要的输出应该是这样的
<Consumer Username="eallen">
<ConsumerPhone/>
<ConsumerAddress />
</Consumer>
<Consumer Username="jgibson">
<ConsumerPhone/>
<ConsumerAddress />
</Consumer>
但我的查询(我认为是问题)是将消费者地址放在ConsumerPhone元素
中<Consumer Username="eallen">
<ConsumerPhone>
<ConsumerAddress />
</ConsumerPhone>
</Consumer>
<Consumer Username="jgibson">
<ConsumerPhone>
<ConsumerAddress />
</ConsumerPhone>
</Consumer>
这是查询
SELECT Consumer.Username,ConsumerPhone.Number,ConsumerAddress.Country
FROM [dbo].[Consumer] Consumer
LEFT JOIN [dbo].[ConsumerPhone] ConsumerPhone
ON Consumer.ConsumerID = ConsumerPhone.ConsumerID
LEFT JOIN [dbo].[ConsumerAddress] ConsumerAddress
ON Consumer.ConsumerID = ConsumerAddress.ConsumerID
order by Consumer.ConsumerID asc
OFFSET 100 ROWS
FETCH NEXT 100 ROWS ONLY
FOR XML AUTO;
我不确定如何修复我的查询以获取我正在寻找的输出。
由于
我将其更改为使用嵌套的FOR XML语句以允许在正确的元素中使用多个值。
SELECT
Consumer.*,
(SELECT
cp.*
FROM dbo.ConsumerPhone cp
WHERE cp.ConsumerID = Consumer.ConsumerID
FOR XML PATH('ConsumerPhone'), TYPE
) AS 'ConsumerPhoneNos'
FROM dbo.Consumer Consumer
where Consumer.ConsumerID = 220901
FOR XML PATH('Consumer'), ROOT('Consumers')
答案 0 :(得分:1)
这将有效:
SELECT Consumer.Username AS "@Username",
ConsumerPhone.Number AS "ConsumerPhone",
ConsumerAddress.Country AS "ConsumerAddress"
FROM [dbo].[Consumer] Consumer
LEFT JOIN [dbo].[ConsumerPhone] ConsumerPhone
ON Consumer.ConsumerID = ConsumerPhone.ConsumerID
LEFT JOIN [dbo].[ConsumerAddress] ConsumerAddress
ON Consumer.ConsumerID = ConsumerAddress.ConsumerID
order by Consumer.ConsumerID asc
OFFSET 100 ROWS
FETCH NEXT 100 ROWS ONLY
FOR XML PATH ('Consumer');