避免多行項目連線中出現重複的訂單號碼
涉及每個訂單包含多個行項目的表格的資料庫連接通常會導致結果中出現重複的訂單號碼。 本文探討了針對每個唯一訂單僅檢索一筆記錄的有效解決方案。
最初的方法及其缺點
一種簡單的方法可能涉及僅選擇「TOP 1」訂單項目。 但是,由於從內部 select 語句直接存取外部表的限制,此操作失敗。
高效解決方案:交叉應用
CROSS APPLY
運算子提供了一個優雅的解決方案:
<code class="language-sql">SELECT Orders.OrderNumber, LineItems2.Quantity, LineItems2.Description FROM Orders CROSS APPLY ( SELECT TOP 1 LineItems.Quantity, LineItems.Description FROM LineItems WHERE LineItems.OrderID = Orders.OrderID ) LineItems2</code>
CROSS APPLY
有效檢索每個訂單的第一個訂單項,防止重複的訂單號碼。
舊版 SQL Server 版本的替代方案:INNER JOIN
對於 2005 年之前的 SQL Server 版本,INNER JOIN
提供了類似的解決方案:
<code class="language-sql">SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description FROM Orders JOIN LineItems ON LineItems.LineItemGUID = ( SELECT TOP 1 LineItemGUID FROM LineItems WHERE OrderID = Orders.OrderID )</code>
確保確定性結果
至關重要的是,沒有 TOP 1
子句的 ORDER BY
是不確定的。 即使資料未更改,選定的行項目也可能在查詢執行之間有所不同。 始終在內部查詢中包含 ORDER BY
子句以確保結果一致。
以上是連接具有多個行項目的表格時如何消除重複的訂單號碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!