2016-04-30 80 views
0

我有一個名爲products的表,它包含所有產品,例如T恤和product_variants,它們具有相關的顏色變體,例如。黑色,藍色,綠色,每個都有stock列 - 保留剩下的股票數量。MySQL - 如果在選擇多行列值

我想建立一個查詢,可以告訴我哪些產品完全售罄,哪些不是。

stock列應該是0被賣完,但如果它的NULL> 0,它是在股票。當我們有無限的數量時使用NULL

這是下面的結果,我想獲得:

product_id|soldOut|stock 
------------------ 
1   |Yes |0 
2   |Yes |0 
3   |No  |NULL 
4   |No  |1 

什麼,我試圖做的,如下:

  1. 抓取所有產品
  2. 做一個加盟product_variants
  3. Group by product_id僅顯示每個產品的一個結果。
  4. 選擇的product_id和IF(stock > 0 OR stock IS NULL, 'No', 'Yes') as SoldOUt

查詢:

SELECT p.product_id, IF(pv.stock > 0 OR pv.stock IS NULL, 'No', 'Yes') as SoldOUt 
FROM products p 
JOIN product_variants pv ON (`pv`.`product_id` = `p`.`product_id`) 
GROUP BY p.product_id 

結果是soldOut是不正確的 - 現在看來似乎只是需要變體排隨機檢查的這個stock和答案。

取而代之的是,它應該檢查所有的變體行,看看它們中的任何一個還沒有soldOut(使用上面的if語句),然後返回該產品的最終答案。

我做了什麼錯了,怎麼能做到這一點呢?

回答

1

首先,你不需要join,只需要聚合。

所以,這裏是一個方法,檢查所有變體0

select pv.product_id, 
     (case when sum(pv.stock = 0) = count(*) then 'Yes' else 'No' 
     end) as SoldOut 
from product_variants pv 
group by p.product_id; 

我猜你也想sum(pv.stock)以及對於最後一列。

+0

謝謝!給了我一種思考的新方式。 – Karem