代码之家  ›  专栏  ›  技术社区  ›  mezzomix

具有相同id的多个实例的SQL联接表

  •  0
  • mezzomix  · 技术社区  · 7 年前

    我在同一个数据库中有两个表;tableA具有 date 我需要tableB有 cost . 这些表就像是一个不断变化的日期和成本的档案,因此单个项目会重复多次,但我只想要最新的 日期 和最低 费用 .

    数据示例:

    表A

      LocalSKU: aaa-aaa1 date: 12/1/1
      LocalSKU: aaa-aaa1 date: 11/1/3
      LocalSKU: aaa-aaa1 date: 10/2/1
    

    表B

      SKU: aaa-aaa1 cost: 0.15
      SKU: aaa-aaa1 cost: 5
      SKU: aaa-aaa1 cost: 0
    

    预期结果:

    SKU: aaa-aaa1 date: 12/1/1 cost: 0
    

    我尝试了一个简单的查询,用此查询返回单个结果:

    SELECT MAX(date) 
    FROM tableA 
    WHERE LocalSKU = (SELECT MIN(cost) 
                      FROM tableB 
                      WHERE SKU = tableB.LocalSKU GROUP BY SKU);
    

    产生了0个结果。

    我不熟悉子查询和连接,有没有一个查询可以得到想要的结果?我能够在单独的查询中获得所需的信息,但我在尝试合并数组以合并所需信息时遇到了困难。

    非常感谢您的帮助!

    1 回复  |  直到 6 年前
        1
  •  0
  •   Barmar    7 年前

    联接表并对结果使用聚合函数。

    SELECT a.localsku, MIN(cost), MAX(date)
    FROM tableA
    JOIN tableB ON a.localsku = b.sku
    GROUP BY a.localsku
    

    实际上,首先进行分组,然后连接子查询可能会更高效,因为连接大型表的成本很高。

    SELECT a.localsku, a.date, b.cost
    FROM (
        SELECT localsku, MAX(date) AS date
        FROM tableA
        GROUP BY localsku) AS a
    JOIN (
        SELECT sku, MIN(cost) as cost
        FROM tableB
        GROUP BY sku) AS b
    ON a.localsku = b.sku