首页 >数据库 >mysql教程 >连接具有多个行项目的表时如何消除重复的订单号?

连接具有多个行项目的表时如何消除重复的订单号?

Linda Hamilton
Linda Hamilton原创
2025-01-17 06:21:09159浏览

How to Eliminate Duplicate Order Numbers When Joining Tables with Multiple Line Items?

避免多行项目连接中出现重复的订单号

涉及每个订单包含多个行项目的表的数据库连接通常会导致结果中出现重复的订单号。 本文探讨了针对每个唯一订单仅检索一条记录的有效解决方案。

最初的方法及其缺点

一种简单的方法可能涉及仅选择“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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn