如何将查询转换为关联查询
How to convert query to Correlated Query
与相关查询作斗争,想知道是否有人可以分享更好的 example/explanation 如何创建 'Correlated Query.' 我确实理解 inner/outer 查询是相互依赖的,但仍然不相信我的解决方案是准确的,或者在对它们进行编码时感到非常确定,并想到练习转换我正在处理的相关查询。这是工作查询的示例:
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;
感谢指导和建议。
我想这就是你想要的:
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
s
由于您同时从产品和订单详细信息中进行选择 table,因此您应该仅使用基于连接的解决方案:
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
(也已修复)。
与相关查询作斗争,想知道是否有人可以分享更好的 example/explanation 如何创建 'Correlated Query.' 我确实理解 inner/outer 查询是相互依赖的,但仍然不相信我的解决方案是准确的,或者在对它们进行编码时感到非常确定,并想到练习转换我正在处理的相关查询。这是工作查询的示例:
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;
感谢指导和建议。
我想这就是你想要的:
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
s
由于您同时从产品和订单详细信息中进行选择 table,因此您应该仅使用基于连接的解决方案:
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
(也已修复)。