不同类型的相关查询

时间:2016-05-26 18:34:43

标签: sql correlated-subquery

我有我的查询,我需要使用相关子查询获得相同的输出。我是相关子查询的新手,所以请帮忙。

原始查询:

SELECT Sales.SalesOrderHeader.CustomerID, SUM(Sales.SalesOrderDetail.LineTotal)
FROM Sales.SalesOrderDetail
    INNER JOIN Sales.SalesOrderHeader
    ON Sales.SalesOrderDetail.SalesOrderID = Sales.SalesOrderHeader.SalesOrderID
GROUP BY Sales.SalesOrderHeader.CustomerID;

1 个答案:

答案 0 :(得分:0)

对不起评论中的所有来回。在查询的SELECT部分​​中使用相关子查询,您也可以将其写为:

SELECT customerID, sum(sumOfLines)
FROM
    (
        SELECT header.CustomerID, 
            (SELECT sum(Detail.LineTotal) FROM Sales.SalesOrderDetail.LineTotal as Detail WHERE Detail.SalesOrderID = header.SalesOrderID) as sumOfLines
        FROM Sales.SalesOrderHeader.CustomerID as header
    ) sub
GROUP BY customerID

这非常难看,并且不会表现得更快。您的DBMS很有可能为这两个版本选择相同的执行路径。

更新:我通过使用子查询更新了上面的sql再次聚合,以便只有唯一的customerID才能通过,因为我们无法在使用相关子查询的查询中的相关子查询上进行聚合。