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

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

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

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

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

textual
Листинг программы
  1. UPDATE films f SET f.availableForGame = 1
  2. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы