0

我有四个表,如下所示:

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,但我确信当我知道如何加入他们时,我也能做到。

提前致谢!

4

2 回答 2

4

我建议您合并表项目和项目2。如果一个字段不适用于某个项目(例如本例中的大小),这就是 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
于 2013-03-07T23:21:53.157 回答
1

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

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

所以

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

于 2013-03-07T23:21:40.023 回答