【问题标题】:SQL JOIN tables where have multiple instances of the same id具有相同 ID 的多个实例的 SQL JOIN 表
【发布时间】:2018-02-09 17:10:53
【问题描述】:

我在同一个数据库中有两个表; tableA 有我需要的date,而 tableB 有cost。这些表格就像是更改日期和成本的档案,因此单个项目会重复多次,但我只想要最近的date 和最低的cost

数据示例:

tableA

  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 个结果。

我是子查询和加入的新手,是否可以进行单个查询来获得所需的结果?我能够在单独的查询中获得我想要的信息,但是我在尝试合并数组以组合所需的信息时遇到了困难。

非常感谢您的帮助!

【问题讨论】:

    标签: php mysql join subquery


    【解决方案1】:

    加入表格并对结果使用聚合函数。

    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
    

    【讨论】:

    • 哇,哇——这太棒了,而且奏效了!是否有一些文档,这是对菜鸟友好的阅读,已将其分解,以便我将来可以构建自己的文档?
    猜你喜欢
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多