不同类型的关联查询

Different types of correlation query

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

原查询:

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;

对于评论中的所有来回,我们深表歉意。在查询的 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 通过,因为我们无法在使用相关子查询的查询中的相关子查询上聚合。