0

I have four tables, like these:

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   |
--------------------

I need to get a result which have both, items and items2, with the MIN of each price. In this example the result should be something like this:

| 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       |
-------------------------------------------

I also should be able to ORDER BY minprice, but I'm sure when I know how to join them I can do that too.

Thanks in advance!

4

2 に答える 2

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
于 2013-03-07T23:21:53.157 に答える
1

私が言えることは、あなたは物事を複雑にしすぎているということです。必要なテーブルは 1 つだけです。サイズがない item リレーションのタプルの場合は、単純に null としてマークします。

これはおそらく単純化しすぎです。価格が「販売」などの場合、左結合を使用して探している関係を構築できます

それで

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 に答える