限制 SQL 連接到第一個相關行
在 SQL 中有效連接多個表至關重要,但有時我們只需要相關表中的第一行。本文示範如何將聯接限制為單行,從而在處理一對多關係時避免重複行。
讓我們來看一個常見的場景:
我們有兩個表,Orders
和 LineItems
。 雖然大多數訂單只有一個訂單項,但有些訂單可能有多個訂單項目。 如果存在多個訂單項,標準 INNER JOIN
將導致訂單行重複。
為了防止這種情況,我們將連線限制為每個訂單僅第一個 LineItems
行。 這裡有兩個有效的方法:
使用 CROSS APPLY(SQL Server 2005 及更高版本):
這種方法提供了一個更乾淨、更容易閱讀的解決方案:
<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>
使用帶有子查詢的內連接(SQL Server 2005 之前版本):
對於較舊的 SQL Server 版本,此方法達到相同的結果:
<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
子句以指定所需的排序條件。
以上是如何將 SQL 連線限制為僅相關表的第一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!