Выбрать данные, посчитать строки и сделать update одним запросом - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, есть таблица films(родительская)
CREATE TABLE `films` (
  `film_id` BIGINT(20) NOT NULL,
  `availableForGame` tinyint(4) DEFAULT NULL,
  `name` VARCHAR(255) DEFAULT NULL
  PRIMARY KEY (`film_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
и stills(дочерняя)
CREATE TABLE `stills` (
  `still_id` BIGINT(20) NOT NULL,
  `film_film_id` BIGINT(20) DEFAULT NULL,
  `availableForGame` bit(1) NOT NULL,
  PRIMARY KEY (`still_id`),
  KEY `FK_dvcb1uaqjeir126hhp5kkj4qg` (`film_film_id`),
  CONSTRAINT `FK_dvcb1uaqjeir126hhp5kkj4qg` FOREIGN KEY (`film_film_id`) REFERENCES `films` (`film_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Можно ли придумать запрос который установит films.availableForGame в TRUE если количество кадров для данного фильма имеющих still.availableForGame=TRUE больше или равно 2. Ответившему плюс к карме, и долгих лет.

Решение задачи: «Выбрать данные, посчитать строки и сделать update одним запросом»

textual
Листинг программы
UPDATE films f SET f.availableForGame = 1
WHERE 2 >= (SELECT COUNT(1) FROM stills s WHERE s.film_film_id = f.film_id AND f.availableForGame=1);

Объяснение кода листинга программы

В данном коде выполняется обновление столбца availableForGame в таблице films. Условие обновления определяется с помощью подзапроса, который выбирает количество строк из таблицы stills, где film_id совпадает с film_id из таблицы films и availableForGame равно 1. Если это количество больше или равно 2, то значение столбца availableForGame в таблице films устанавливается равным 1.

  1. Обновление столбца availableForGame в таблице films
  2. Условие обновления определяется с помощью подзапроса
  3. Подзапрос выбирает количество строк из таблицы stills
  4. Условие: film_id из таблицы films равен film_id из таблицы stills
  5. И availableForGame равно 1
  6. Если количество строк больше или равно 2, то значение столбца availableForGame устанавливается равным 1

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы