SQL JOIN表,其中包含多个具有相同标识

时间:2018-02-09 17:10:54

标签: php mysql join subquery

我在同一个数据库中有两个表; 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

tableB的

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

我不熟悉subquerying和join,是否有一个查询可以获得所需的结果?我能够在单独的查询中获得我想要的信息,但是我试图合并数组以组合所需的信息。

非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

加入表并在结果上使用聚合函数。

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