Выбрать данные, посчитать строки и сделать update одним запросом - MySQL
Формулировка задачи:
Здравствуйте, есть таблица films(родительская)
и stills(дочерняя)
Можно ли придумать запрос который установит films.availableForGame в TRUE если количество кадров для данного фильма имеющих still.availableForGame=TRUE больше или равно 2.
Ответившему плюс к карме, и долгих лет.
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
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
Решение задачи: «Выбрать данные, посчитать строки и сделать 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.
- Обновление столбца
availableForGame
в таблицеfilms
- Условие обновления определяется с помощью подзапроса
- Подзапрос выбирает количество строк из таблицы
stills
- Условие:
film_id
из таблицыfilms
равенfilm_id
из таблицыstills
- И
availableForGame
равно 1 - Если количество строк больше или равно 2, то значение столбца
availableForGame
устанавливается равным 1
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д