【问题标题】:SQL - Subquery returned more than 1 value. How to Fix?SQL - 子查询返回超过 1 个值。怎么修?
【发布时间】:2015-05-19 20:52:26
【问题描述】:

-- 使用订单、客户、员工和订单详细信息表,选择订单 ID、订单日期、 -- 客户公司名称、员工姓氏以及每个订单支付的总金额(包括运费,但忽略折扣)

我觉得我的答案非常接近,但我一直遇到这个错误。我是数据库新手,所以我认为我忽略了一些简单的东西。我查看了具有相同错误的其他页面,但对我来说没有任何意义。

子查询本身可以工作,但是当我将它扔到查询的其余部分时,我得到了这个错误:子查询返回了超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

这是我目前的查询:

Select (Select (Sum(UnitPrice * Quantity) + Freight) as AmountPaid
    From [Order Details], Orders
    Group By [Order Details].OrderID, Freight), 
    OrderDate, [Order Details].OrderID, CompanyName, LastName 
From [Order Details], Customers, Employees
Inner Join Orders ON OrderID=Orders.OrderID

【问题讨论】:

  • 在“选择”部分使用子查询,只能返回一行一列。如果您期望多行,请使用 join。
  • 您的答案不是很接近。您在外部查询中的联接都是错误的。子查询中的连接都是错误的。

标签: sql sql-server inner-join


【解决方案1】:

改变

(Sum(UnitPrice * Quantity) + Freight)

Sum((UnitPrice * Quantity) + Freight)

【讨论】:

  • 运费只在计算该订单中所有产品的总和后添加到每个订单,而不是每次输入,因为 orderID 特定于每个货件,而不是每个产品.
【解决方案2】:

删除内连接子句。

在末尾添加 where 条件,如下所示:

其中 table1.a = table2.a 和 table2.x = table3.y

查看表关系是如何定义的。

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 2013-04-05
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多