Различные типы корреляционных запросов

У меня есть запрос, и мне нужно получить те же выходные данные с соответствующим вложенным запросом. Я новичок в соответствующих подзапросах, поэтому, пожалуйста, помогите.

Исходный запрос:

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 ответ

  1. Извините за все назад и вперед в комментариях. Используя коррелированный вложенный запрос в выделенной части запроса, можно также записать это как:

    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
    

    Это довольно некрасиво и не собирается выполнять быстрее. Существует большая вероятность того, что СУБД выберет один и тот же путь выполнения для обеих версий.


    Update: я обновил вышеупомянутый sql для агрегирования снова с помощью вложенного запроса, так что только уникальный customerID прошел, так как мы не можем агрегировать на коррелированном вложенном запросе в запросе, который использует коррелированный вложенный запрос.