2015-06-02 83 views
0

我有兩個表,產品和products_descriptionMySQL的兩個表最小值和集團通過

產品:

Product_ID Product_Price 
1    10  
2    20  
3    10  
4    20 
5    10  
6    20 
7    10  
8    10 
9    10  
10    10 

Products_Description:

Product_ID Product_Name 
1    Pants - Black  
2    Pants - Black  
3    Pants - White  
4    Pants - White 
5    Pants - Red  
6    Pants - Red 
7    Hat  
8    Socks 
9    Scarf  
10    Bird 

基本上我需要實現相對於碼到當前已經存在於購物車中的代碼。

實現需要GROUP BY products_name - 但提供最便宜的一個。

到目前爲止,我有以下幾點:

SELECT p.products_id, p.products_price, pd.products_name 

FROM products p 

// BOF定製子查詢

join 
(
SELECT pp.products_id, pp.products_name, min(pr.products_price) as min_price 
from products_description pp 
inner JOIN products pr 
ON pp.products_id = pr.products_id 
group by pp.products_name 
) 
AS subq on p.products_id = subq.products_id and p.products_price = subq.min_price 

// EOF定製子查詢

LEFT JOIN products_description pd on p.products_id = pd.products_id 

所需的輸出:

Product_ID Product_Name Product_Price 
1    Pants - Black 10 
3    Pants - White 10 
5    Pants - Red  10 
7    Hat    10 
8    Socks   10 
9    Scarf   10 
10    Bird   10 

但發生了什麼事是褲子被刪除。並且只有產品7-10被留下....

任何想法的人都可以嗎?

+0

「實現需要GROUP BY products_name - 但提供最便宜的一個。」什麼?聽起來你正試圖解決數據庫設計的問題?你通常不會分組產品.... –

+0

我有一種非常具體的需要這樣做。這對DB設計來說不是問題。 – StuyvesantBlue

+0

這不是它從示例數據看起來的樣子... –

回答

1

您似乎想要每個產品名稱的最便宜的產品。查詢有點複雜,因爲價格和名稱信息是分開的。編寫查詢的一種方法是:

select p.Product_ID, ppd.Product_Name, p.price 
from product_description pd join 
    products p 
    on pd.product_id = p.product_id join 
    (select pd2.Product_name, min(p2.price) as minprice 
     from product_description pd2 join 
      products p2 
      on pd2.product_id = p2.product_id 
     group by pd2.Product_name 
    ) ppd 
    on ppd.Product_Name = pd.Product_Name and 
     ppd.minprice = p.price;