Где условие в GROUP_CONCAT - PullRequest
0 голосов
/ 15 апреля 2019

enter image description here

Я пытаюсь получить идентификаторы изображений, в которых отсутствует ярлык «автомобиль».Я попытался сгруппировать все метки объектов, которые связаны с конкретным идентификатором изображения.

Я пытаюсь исключить идентификатор изображения, в котором присутствует «автомобиль».Но вместо этого в группе исключается только метка объекта 'car'.

Я пробовал это -

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

Оба запроса дают идентификатор и просто исключают метку объекта «автомобиль».Выходными данными должна быть строка идентификаторов изображений, в которой нет метки объекта с именем 'car'

Ответы [ 3 ]

1 голос
/ 15 апреля 2019

Вы можете просто добавить подсчет количества 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

0 голосов
/ 15 апреля 2019

Вы можете легко исключить идентификаторы изображений с надписью 'car' с помощью NOT EXISTS:

SELECT 
  t.used_car_image_id, 
  GROUP_CONCAT(DISTINCT t.object_label ORDER BY t.object_label ASC SEPARATOR ',') labels
FROM individual_used_cars_image_label t 
WHERE NOT EXISTS (
  SELECT 1 FROM individual_used_cars_image_label
  WHERE used_car_image_id = t.used_car_image_id AND object_label ='car' 
)
GROUP BY t.used_car_image_id
0 голосов
/ 15 апреля 2019

Вы должны использовать выражение CASE в предложении HAVING, которое проверяет наличие car:

SELECT used_car_image_id, GROUP_CONCAT(DISTINCT object_label ORDER BY object_label SEPARATOR ',') labels
FROM individual_used_cars_image_label 
GROUP BY used_car_image_id
HAVING COUNT(CASE WHEN object_label = 'car' THEN 1 END) = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...