2013-03-07 61 views
0

我有四個表,像這樣的:如何獲得與MIN(MySQL的)從三個表信息

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

我需要得到具有兩個,項目和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。如果一個字段不適用於某個項目(比如這種情況下的大小),那麼這就是空值。

我沒有測試過這工作,但你想要的東西,如:

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

恕我直言,'UNION ALL'會更好,因爲沒有必要消除重複。 – peterm 2013-03-07 23:32:42

+0

@peterm好點,編輯 – Patashu 2013-03-07 23:40:38

+0

您不能選擇您未包含在組中的非聚合。 MySQL允許這樣的查詢,但它不可靠,不會在任何理智的db上工作。 – 2013-03-07 23:48:54

1

從我可以告訴你,你已經結束了複雜的事情。你只需要一張桌子。對於沒有大小的項目關係中的元組,只需將其標記爲空即可。

這可能是過於簡單化了。如果價格是「銷售」或類似的東西,你可以使用LEFT JOIN建立的關係,你正在尋找

所以

SELECT i.id,i.name,i.category,i.size, p.price as min_price從項目i LEFT JOIN價格p其中p.price < = 40 ORDER BY分鐘價格