在选择语句中,子查询返回了多个行

5
假设我有两个表,一个是orderdetails,另一个是orders。
我想打印出订单日期、订单状态和订单总价。
在orderdetails表中,有订单编号、订购数量、单价和产品代码。
在orders表中,有订单状态和订单编号。
我尝试了以下代码,但它不起作用。
SELECT orderDate, status,  (SELECT SUM(quantityOrdered * priceEach) AS prices FROM orderdetails GROUP BY orderNumber)

FROM orders o, orderdetails od

WHERE od.orderNumber = o.orderNumber

1
日期在哪个表中? - Kiran Shakya
@KiranShakya 我现在考虑他的数据可能没有规范化。 - Tim Biegeleisen
@KiranShakya 日期在订单表中。 - Damhan Richardson
3个回答

7

使用连接操作:

SELECT t1.orderDate,
       t1.status,
       t2.prices
FROM orders t1
INNER JOIN
(
    SELECT orderNumber,
           SUM(quantityOrdered * priceEach) AS prices
    FROM orderdetails
    GROUP BY orderNumber
) t2
    ON t1.orderNumber = t2.orderNumber

3
您的方法是合理的。但应该像这样:
SELECT o.orderDate, o.status,
       (SELECT SUM(od.quantityOrdered * od.priceEach)
        FROM orderdetails ol
        WHERE od.orderNumber = o.orderNumber
       ) as Prices
FROM orders o;

这被称为“相关子查询”。请注意,使用了WHERE子句而不是GROUP BY


0

您可以执行如下简单的联接操作:

SELECT
    o.date AS order_date,
    o.status AS order_status,
    SUM(od.quanityordered * od.price) AS total_price
FROM orderdetails od
INNER JOIN order o
ON o.ordernumber = od.ordernumber
GROUP BY order_date, order_status

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接