[英]One to many relationship in SQL Server query
我在SQL Server Orders
和OrderDetails
有兩個表。
Orders
包含OrderID
等。 OrderDetails
包含OrderID
, ItemID
, Quantity
等。 這兩個表具有一對多的關系。 一個訂單可以有很多項目。
從這兩個表中檢索記錄的最佳方法是什么,這樣當我在ASP頁面中顯示記錄時,它將具有以下表格格式?
OrderID ItemID Quantity
1 156 1
2 156 2
150 1
188 1
3 245 1
344 1
最簡單的方法是使用查詢從主循環中的OrderDetails
表中檢索詳細信息,但這將是非常耗費資源的。
有沒有更好的方法來實現這一目標?
數據庫在SQL Server中,我的頁面在經典ASP中。
謝謝。
SQL:
select o.OrderID, d.ItemID, d.Quantity
from Orders o
inner join OrderDetails d on o.OrderID = d.OrderID
order by o.OrderID, d.ItemID
ASP:
將最后一個OrderID
存儲在一個變量中,只要它與上次打印它不同,否則打印一個空的<td>
<%
set lastId = -1
do while not objRS.EOF
%>
<tr>
<% if lastId <> objRs("OrderID") then %>
<td><%= objRs("OrderID") %></td>
<% else %>
<td></td>
<% end if %>
<td><%= objRs("ItemID") %></td>
<td><%= objRs("Quantity") %></td>
</tr>
<%
lastId = objRs("OrderID")
loop %>
你有3個選擇:
(a)創建一個stored procedure
,將關系“展平”為單行,然后您的表示層可以有選擇地選擇隱藏或顯示的內容。 有效地,您的查詢應將以下數據返回到業務對象:
OrderID ItemID Quantity 1 156 1 2 156 2 2 150 1 2 188 1 3 245 1 3 344 1
然后,您的UI必須處理顯示父子關系和隱藏重復訂單的復雜性。
(b)使用ORM(如Entity Framework
或nHibernate
填充反映表和關系結構的父/子對象模型。 這樣,表示層就可以寫出對象模型(遍歷每個父集合和子集合)。
(c)通過循環中的單獨查詢為每個訂單加載每個訂單詳細信息集合。
選項(c)是最不受歡迎的,因為它的擴展非常嚴重,因為數據庫調用的數量直接與訂單數量相關。
如果您使用ORM,則選項(b)是最佳方法,但如果不是簡單解決方案(a)是通過存儲過程一次快速檢索數據的好方法。
請記住,如果您有大型數據集,則可能需要考慮實現paging
,因為在檢索更多數據時性能會降低。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.