2017-03-27 33 views
0

與相關查詢拼搏,並想知道是否有人可以分享更好的示例/說明如何創建「相關查詢」。我理解內部/外部查詢是相互依賴的,但仍然不相信我的解決方案是準確的,或者在編碼它們時感覺非常確定,並且認爲我正在努力實現相關的轉換查詢。下面是例子工作查詢:如何將查詢轉換爲相關查詢

SELECT p.productid, p.productname, SUM(od.unitprice - od.discount) * od.qty 
    AS total_amount 
    FROM Production.Products AS p 
    JOIN Sales.OrderDetails AS od 
    ON p.productid = od.productid 
    JOIN Sales.Orders AS o 
    ON od.orderid = o.orderid 
    WHERE o.shipcountry = 'USA'; 

--EDITED--Converted to Correlated Query 

所以,如果我想變成一個相關子查詢,這應該是解決方案。感謝您的指導和建議。

SELECT productid, productname 
FROM Production.Products AS t1 
WHERE productid = (SELECT SUM(od.unitprice - od.discount) * od.qty AS 
total_amount 
    FROM Sales.OrderDetails AS od 
     JOIN Sales.Orders AS o 
    ON od.orderid = o.orderid 
    JOIN Production.Products AS t2 
    ON t2.productid = t1.productid 
    WHERE o.shipcountry = 'USA') 
GROUP BY productid, productname; 

感謝您的指導和建議。

回答

1

因爲你是從產品和ORDERDETAILS表中選擇,你應該只使用基於連接的解決方案:

select p.productid, 
    p.productname, 
    SUM((od.unitprice - od.discount) * od.qty) as total_amount 
from Production.Products as p 
join Sales.OrderDetails as od on p.productid = od.productid 
join Sales.Orders as o on od.orderid = o.orderid 
where o.shipcountry = 'USA' 
group by p.productid, 
    p.productname 

注意添加group by條款與您使用sum(也是固定的)。

1

我想這是你想要什麼:

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

相關子查詢是不恰當的位置。你從多個表中返回結果。只需用GROUP By正確地執行JOIN即可。

+1

單位價格和折扣都在OP的OrderDetails表中,因爲某種原因 – GurV

+0

是的,忘了把Group By放在那裏。第二個查詢是否符合相關的子查詢(當然是添加組)?來自外部查詢的productid與內部查詢匹配並且結果被添加? – allendks45

+0

@ allendks45。 。 。我不明白你的評論。這個版本一直有'group by'。 –