我有四张桌子,如下:
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
,但我确信当我知道如何加入他们时我也可以这样做。
提前致谢!
答案 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