假设我有下表“产品”
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(= 每种颜色至少有一种变体,图像 = 1)
这意味着:
- 获取product_id = 13的所有变体
- 检查是否至少有一个 color=red 的变体具有 image = 1
- 检查是否至少有一个 color=green 的变体具有 image = 1
=>
- 如果 color=red 的任何变体的 image = 1,则更新 ID 为 13 的产品,并设置missing_images = 1
或者
- 如果 color=green 的任何变体的 image = 1,则更新 ID 为 13 的产品,并设置missing_images = 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;
关于mysql - 查询以检查分组行是否具有值 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48420855/