【问题标题】:How to convert query to Correlated Query如何将查询转换为相关查询
【发布时间】:2017-03-27 21:07:10
【问题描述】:

与相关查询作斗争,想知道是否有人可以分享一个更好的示例/说明如何创建“相关查询”。我确实了解内部/外部查询相互依赖,但仍然不相信我的解决方案是准确的,或者在编码它们时感觉非常确定,并考虑练习转换我正在努力关联的查询。这是工作查询的示例:

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;

感谢您的指导和建议。

【问题讨论】:

    标签: sql-server tsql correlated-subquery


    【解决方案1】:

    由于您是从 products 和 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(也已修复)。

    【讨论】:

      【解决方案2】:

      我想这就是你想要的:

      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 正确执行JOINs。

      【讨论】:

      • 由于某种原因,单价和折扣在 OP 的 OrderDetails 表中
      • 是的,忘记将 Group By 放在那里。第二个查询是否符合相关子查询(当然添加 Group by)是否合适?外部查询的productid匹配内部查询并添加结果?
      • @allendks45 。 . .我不明白你的评论。这个版本一直有group by
      • 我的意思是我的原始版本。如果我想把它变成一个相关的查询,如果有新手可以使用的大师的任何“最佳实践”,我也在寻求指导。尽管找到了几个站点,但用于示例的多表相关子查询并不多。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2021-01-28
      • 2020-07-19
      • 2021-10-11
      • 2021-02-13
      • 2020-10-21
      相关资源
      最近更新 更多