2016-09-13 2 views
1

Я пытаюсь обернуть голову вокруг подзапросов (коррелированных). Хотя в книге объясняется (MS SQL Server 2012), я все еще немного запутался. Используя три таблицы, Заказы, Продукты и Детали заказа, я хочу найти сумму всех продуктов, которые были отправлены в США. Я придумал следующий запрос, но не совсем понимаю, как я туда попал, кроме того, что корреляция ссылается на «где» во внешнем запросе. Может кто-то исправить мою работу и предложить лучшее объяснение, чем книгу?Является ли этот коррелированный SubQuery правильным

SELECT p.productid, p.productname, SUM(qty * od.unitprice) AS TotalAmount 
FROM Production.Products AS p 
    JOIN Sales.OrderDetails AS od 
    ON p.productid = od.productid 
    WHERE N'USA' IN 
     (SELECT o.shipcountry 
     FROM Sales.Orders AS o 
     JOIN Sales.OrderDetails AS od 
     ON o.orderid = od.orderid 
     WHERE shipcountry = N'USA') 
     GROUP BY p.productid, p.productname; 
+0

Вам не нужен подзапрос. – Merenix

+0

Я согласен с тем, почему я смущен, книга (TSQL-2012) дает такую ​​проблему. Другой вопрос, который у меня есть, это внешний запрос и подзапрос, которые должны быть зависимы друг от друга. – allendks45

ответ

1
SELECT 
    p.ProductID 
, p.ProductName 
, SUM(qty * od.UnitPrice) as [Total_Amount] 
FROM 
     Production.Products productid 
JOIN  Sales.OrderDetails as od on p.productid = od.product 
JOIN  SalesOrders  as o  on o.OrderID = od.OrderID 
WHERE 
    o.Shipcountry in ('USA') 
Group BY 
    p.ProductID, 
    P.ProductName 

Следующая должен работать - вы технически не требуют суб запроса. Будут только искажать запрос.

Смежные вопросы