通过三层标量子查询传递数据

Posted

技术标签:

【中文标题】通过三层标量子查询传递数据【英文标题】:Passing Data Through A Three Tiered Scalar Subquery 【发布时间】:2012-04-09 13:45:30 【问题描述】:

我有一个查询,它分为三层。也就是说,我有一个主查询,里面有一个标量子查询,里面也有一个标量子查询。

底层标量查询返回两个不同的值,中层子查询返回两个的平均值。但是,底层查询不是接收当前值,而是对表中的所有值进行平均。

有谁知道如何正确地将当前***查询结果的值传递给底部子查询?

代码示例:

Select Product, 
       Description, 
       (Select Avg(Mfg_Cost, Purchasing_Cost) 
        FROM (Select Mfg_Cost, 
                     Purchasing Cost
              From Cost
              Where Cost.Product = Products.Product)) 
From Products;

【问题讨论】:

【参考方案1】:

你不能像这样使用 JOIN 和 GROUP BY:

Select p.Product, 
       p.Description, 
       Avg(c.Mfg_Cost),
       Avg(c.Purchasing_Cost)
From Products p 
    INNER JOIN
              Cost c
              ON c.Product = p.Product
GROUP BY p.Product, p.Description;

一般来说,如果您需要从子查询中返回多个值:

Select p.Product, 
       p.Description,
       q2.AvgMfg_Cost,
       q2.AvgPurchasing_Cost
From Products p INNER JOIN
  (
       Select c.Product, 
              Avg(c.Mfg_Cost) AS AvgMfg_Cost, 
              Avg(c.Purchasing_Cost) AS AvgPurchasing_Cost
              From Cost c
              Group by c.Product
  ) AS q2
  on q2.Product = p.Product;

在 Microsoft SQL Server 中,您还可以使用 Common Table Expression (CTE)

【讨论】:

谢谢nonnb,不幸的是我的情况比我最初领导的要复杂得多。从那以后,我又挖了一些,发现了我的问题。我无法将顶部查询中的值传递给底部子查询。我把它修好了,世界又好了!谢谢!

以上是关于通过三层标量子查询传递数据的主要内容,如果未能解决你的问题,请参考以下文章

通过 JSON 将 Django 数据库查询集传递给 Highcharts

GraphQL 通过将其作为解析参数之一传递来查询数据库

三层架构

通过 Javascript 传递 MySQL 查询

如何通过将数据作为参数传递以过滤 unix 时间戳来查询具有聚合的 mongodb

三层架构知识点