我要获取特定orderid的所有订单详细信息。我的表结构是
我想要结果
<xmldata>
<Orders>
<OrderID>1</OrderID>
<BillingAddress1>test1</BillingAddress1>
<Total>10</Total>
<OrderDetails>
<OrderDetailID>1</OrderDetailID>
<OrderID>1</OrderID>
<Name>Product1</Name>
<Price>5</Price>
</OrderDetails>
<OrderDetails>
<OrderDetailID>2</OrderDetailID>
<OrderID>1</OrderID>
<Name>Product2</Name>
<Price>5</Price>
</OrderDetails>
</Orders>
</xmldata>
我的sql查询返回
<xmldata>
<Orders>
<OrderID>1</OrderID>
<BillingAddress1>test1</BillingAddress1>
<Total>10</Total>
<OrderDetailID>1</OrderDetailID>
<OrderID>1</OrderID>
<Name>Product1</Name>
<Price>5</Price>
</Orders>
<Orders>
<OrderID>1</OrderID>
<BillingAddress1>test1</BillingAddress1>
<Total>10</Total>
<OrderDetailID>2</OrderDetailID>
<OrderID>1</OrderID>
<Name>Product2</Name>
<Price>5</Price>
</OrderDetails>
</Orders>
</xmldata>
我的问题是
Select orders.*,details.*
FROM orders as orders LEFT JOIN OrderDetails as details
ON orders.orderid=details.orderid
where orders.orderid = 1
1条答案
按热度按时间jaql4c8m1#
这个查询应该会得到你想要的结果。
原始查询的问题是它是非规范化的xml数据,因为每个order detail记录都包含整个order记录,因此每个xml orderdetail元素也包含其相应order的元数据。
此查询通过在应用于订单之前将每个订单的所有订单详细信息转换为xml来解决此问题。
请注意,intellisense将突出显示xmldetails派生表,因为它返回的列比定义的多,但它不会这样做,而且查询仍应运行。