当前位置: 首页 > 面试题库 >

如何加入第一行

邓越泽
2023-03-14
问题内容

我将使用一个具体的但假设的示例。

每个 订单 通常只有一个 订单项

命令:

OrderGUID   OrderNumber
=========   ============
{FFB2...}   STL-7442-1      
{3EC6...}   MPT-9931-8A

LineItems:

LineItemGUID   Order ID Quantity   Description
============   ======== ========   =================================
{098FBE3...}   1        7          prefabulated amulite
{1609B09...}   2        32         spurving bearing

但偶尔会有一个包含两个订单项的订单:

LineItemID   Order ID    Quantity   Description
==========   ========    ========   =================================
{A58A1...}   6,784,329   5          pentametric fan
{0E9BC...}   6,784,329   5          differential girdlespring

通常在向用户显示订单时:

SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
    INNER JOIN LineItems 
    ON Orders.OrderID = LineItems.OrderID

我想在订单上显示单个项目。但是,如果这个偶然的订单包含两个(或多个)项目,那么这些订单将 看起来重复的

OrderNumber   Quantity   Description
===========   ========   ====================
STL-7442-1    7          prefabulated amulite
MPT-9931-8A   32         spurving bearing
KSG-0619-81   5          panametric fan
KSG-0619-81   5          differential girdlespring

我真正想要的是让SQL Server 仅选择一个 ,因为这样就 足够了

OrderNumber   Quantity   Description
===========   ========   ====================
STL-7442-1    7          prefabulated amulite
MPT-9931-8A   32         differential girdlespring
KSG-0619-81   5          panametric fan

如果我喜欢冒险,可以向用户显示一个省略号,以表明有多个:

OrderNumber   Quantity   Description
===========   ========   ====================
STL-7442-1    7          prefabulated amulite
MPT-9931-8A   32         differential girdlespring
KSG-0619-81   5          panametric fan, ...

所以问题是如何

  • 消除“重复”行
  • 仅连接到其中一行,以避免重复

第一次尝试

我的首次尝试是仅加入“ TOP 1 ”行项目:

SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
    INNER JOIN (
       SELECT TOP 1 LineItems.Quantity, LineItems.Description
       FROM LineItems
       WHERE LineItems.OrderID = Orders.OrderID) LineItems2
    ON 1=1

但这给出了错误:

列或前缀“订单”

查询中使用的表名或别名不匹配。

大概是因为内部选择看不到外部表。


问题答案:

SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
JOIN LineItems
ON LineItems.LineItemGUID =
(
SELECT TOP 1 LineItemGUID
FROM LineItems
WHERE OrderID = Orders.OrderID
)

在SQL Server 2005及更高版本中,您可以替换INNER JOINCROSS APPLY

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

请注意,TOP 1如果没有,ORDER BY则不是确定性的:此查询为每个订单提供一个订单项,但未定义为哪个订单项。

即使基础没有变化,多次调用查询也可以为同一订单提供不同的订单项。

如果要确定顺序,则应ORDER BY在最里面的查询中添加一个子句。



 类似资料:
  • 我正在使用Struts 2编写网上购物应用程序。 在前端,我使用了jsp、twitter引导、jquery和Moustach。js模板、twbs分页插件和一些javascript。 我有产品实体,我想在jsp页面中向用户显示产品列表。 我这样做的方式是异步加载页面与固定数量(20)的产品在json格式,然后获得他们使用胡子模板。 除了用户第一次看到此jsp页面时,我的所有代码都正常工作—前20个产

  • 请帮帮我,对于连接,学习SQL和连接是痛苦的:( 我有表:类别,列名称:name,ID 我有列名称为ID的table:sub_类别 我有列名称为category\u id的表:provider\u services 当我在laravel视图中执行此操作时,刀片

  • 现在我的代码如下所示: 我需要获取

  • 本章介绍Go语言的基础组件。本章提供了足够的信息和示例程序,希望可以帮你尽快入门, 写出有用的程序。本章和之后章节的示例程序都针对你可能遇到的现实案例。先了解几个Go程序,涉及的主题从简单的文件处理、图像处理到互联网客户端和服务端并发。当然,第一章不会解释细枝末节,但用这些程序来学习一门新语言还是很有效的。 学习一门新语言时,会有一种自然的倾向, 按照自己熟悉的语言的套路写新语言程序。学习Go语言

  • 问题内容: 我有以下课程: 我想获取在类别中指定ID的广告资源。我正在尝试使用这个 我真的很困惑,请帮忙。谢谢。 问题答案: 好吧,没关系,我知道了怎么做 因此,我实际上想知道如何将类别与联接相关联,我在HQL文档中的“多态查询”下找到了答案。

  • 我想在每次单击按钮时使用jquery添加一个div作为第一个元素