假设我有下表“产品”
id |title|images_missing
13 |shoes| 0
14 |shirt| 0
和另一张表“变种”
id|product_id|color|size|image
1 | 13|red |M |0
2 | 13|red |XL |1
3 | 13|green|M |0
3 | 13|green|S |0
每个产品可以有多种变化(变化由颜色+大小定义)。
我需要一个查询来检查每种颜色,如果至少有一个变体有图像,并且如果至少有一种颜色没有图像(在本例中为绿色),则第一个表中的产品行需要获取丢失图像的值为1。
你能帮我解决这个问题吗?
编辑:
为了使事情更清晰,我的目标是更新产品表并将字段“images_missing”设置为1(=至少一种颜色根本没有图像)或0(=每种颜色)至少有一个变体与image = 1)
这意味着:
=>
OR
答案 0 :(得分:1)
您可以使用图像和整体数量来计算颜色数。这提供了一个表达式,用于确定是否有任何颜色缺失图像:
select p.*,
coalesce(v.images_missing, 0) as images_missing
from products p left join
(select product_id, 1 as images_missing
from variations v
group by product_id
having count(distinct color) <> count(distinct case when image = 1 then color end)
) v
on p.id = v.product_id;
答案 1 :(得分:0)
可能是这个吗?
select p.id,p.title,count(1) images_missing
from products p
inner join
(select product_id,color,sum(image)
from variations
group by product_id,color
having sum(image)=0) as v
on p.id = v.product_id
group by p.id,p.title