如何使用MIN(MySQL)从三个表中获取信息

时间:2013-03-07 23:16:23

标签: mysql sql join min

我有四张桌子,如下:

items
| id | name  | category |
-------------------------
| 1  | item1 | toy      |  
| 2  | item2 | toy      |
| 3  | item3 | home     |
-------------------------
items2
| id | name  | category | size |
--------------------------------
| 1  | itemA | toy      | s    |
| 2  | itemB | home     | l    |
--------------------------------
prices
| items.id | price |
--------------------
|  1       |  10   |
|  1       |  15   |
|  2       |  20   |
|  3       |  25   |
|  3       |  20   |
--------------------
prices
| items2.id | price |
--------------------
|  1        |  15   |
|  2        |  50   |
|  2        |  40   |
--------------------

我需要得到一个包含items和items2的结果,以及每个价格的MIN。在这个例子中,结果应该是这样的:

| id | name  | category | size | minprice |
-------------------------------------------
| 1  | item1 | toy      | null | 10       |
| 2  | item2 | toy      | null | 20       |
| 3  | item3 | home     | null | 20       |
| 1  | itemA | toy      | s    | 15       |
| 2  | itemB | home     | l    | 40       |
-------------------------------------------

我也应该能够ORDER BY minprice,但我确信当我知道如何加入他们时我也可以这样做。

提前致谢!

2 个答案:

答案 0 :(得分:4)

我建议你合并表items和items2。如果某个字段不适用于某个项目(例如本例中的大小),那就是null。

我没有测试过这种方法有效,但你需要这样的东西:

SELECT i.id, name, category, null as size, min(prices.price) from items i
JOIN prices on prices.id = i.id
GROUP BY i.id, i.name, i.category, size
UNION ALL
SELECT i2.id, name, category, size, min(prices2.price) from items2 i2
JOIN prices2 on prices2.id = i2.id
GROUP BY i2.id, i2.name, i2.category, i2.size

答案 1 :(得分:1)

据我所知,你过度复杂化了。你只需要一张桌子。对于没有大小的项关系中的元组,只需将其标记为null。

这可能过于简单了。如果价格是“销售”或类似的东西,您可以使用左连接来构建您正在寻找的关系

所以

SELECT i.id,i.name,i.category,i.size,p.price as min_price FROM items i LEFT JOIN price p其中p.price< = 40 ORDER BY min_price