如何将查询转换为相关查询
问题描述:
与相关查询拼搏,并想知道是否有人可以分享更好的示例/说明如何创建“相关查询”。我理解内部/外部查询是相互依赖的,但仍然不相信我的解决方案是准确的,或者在编码它们时感觉非常确定,并且认为我正在努力实现相关的转换查询。下面是例子工作查询:如何将查询转换为相关查询
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;
感谢您的指导和建议。
答
因为你是从产品和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
(也是固定的)。
答
我想这是你想要什么:
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
即可。
单位价格和折扣都在OP的OrderDetails表中,因为某种原因 – GurV
是的,忘了把Group By放在那里。第二个查询是否符合相关的子查询(当然是添加组)?来自外部查询的productid与内部查询匹配并且结果被添加? – allendks45
@ allendks45。 。 。我不明白你的评论。这个版本一直有'group by'。 –