我有一个名为products
的表,其中包含所有产品,例如T-Shirt和product_variants
,它们具有相关的颜色变体,例如。黑色,蓝色,绿色,每个都有stock
列 - 保留剩余的库存数量。
我想构建一个查询,告诉我哪些产品已售完,哪些不是。
stock
列应为0才能售罄,但如果是NULL
或> 0
,则有库存。我们拥有无限数量时会使用NULL
。
这是我想得到的以下结果:
product_id|soldOut|stock
------------------
1 |Yes |0
2 |Yes |0
3 |No |NULL
4 |No |1
我尝试做的是以下内容:
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语句),然后返回该产品的最终答案。
我做错了什么,如何实现?
答案 0 :(得分: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)
。