首页 > 解决方案 > GROUP_CONCAT 中的条件

问题描述

在此处输入图像描述

我正在尝试获取标签“汽车”不存在的图像 ID。我尝试对与特定图像 ID 相关的所有对象标签进行分组。

我正在尝试排除存在“汽车”的图像 ID。但不是这个唯一的对象标签“汽车”被排除在组中。

我试过这个 -

SELECT used_car_image_id
   , GROUP_CONCAT(DISTINCT object_label ORDER BY object_label ASC SEPARATOR ',')
FROM individual_used_cars_image_label 
GROUP BY used_car_image_id
HAVING GROUP_CONCAT(DISTINCT object_label 
ORDER BY object_label ASC SEPARATOR ',') != 'car'

和这个 -

SELECT used_car_image_id
   , GROUP_CONCAT(DISTINCT object_label ORDER BY object_label ASC SEPARATOR ',')
FROM individual_used_cars_image_label 
WHERE object_label !='car'
GROUP BY used_car_image_id

两个查询都给出了 ID,只是排除了对象标签“汽车”。输出应该是没有名为“汽车”的对象标签的图像 ID 行

标签: mysqlsql

解决方案


您可以只添加object_label与每个相关联的值的used_car_image_id数量相等的计数,car并使用它来过滤结果。该查询利用了 MySQL 在数字上下文中将布尔表达式视为 1 (true) 或 0 (false) 的事实。

SELECT used_car_image_id
     , GROUP_CONCAT(DISTINCT object_label ORDER BY object_label ASC SEPARATOR ',')
FROM individual_used_cars_image_label 
GROUP BY used_car_image_id
HAVING SUM(object_label = 'car') = 0

dbfiddle 上的演示


推荐阅读