mysql - 查询以检查分组行是否具有值 1

标签 mysql sql

假设我有下表“产品”

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/

相关文章:

php - 如何使 mysql 搜索允许两个单独的搜索类别?

PHP eAccelerator 和实时数据

没有证书的mysql ssl连接

本地主机上的 MySQL 查询速度很慢 - moSTLy 网络持续时间

mysql - 这个子选择是在 where 子句之前还是之后执行?

mysql 按两个 unixtime 列组合排序

c# - SQL参数编辑

mysql - SQL - SELECT 中的 SELECT

java - EntityManager createNativeQuery 在 Java Springboot 中返回错误的结果集

mysql - 从 CSV 导入时 PHPMYADMIN 权限被拒绝