Запрос в MySQL - MySQL (219633)

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

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

Здравствуйте. У меня никак не получается выполнить последнее задание для одной лабораторной работы.

Задание:

Требуется выводить только те спектакли, в которых один и тот же человек сыграл более одной роли.

У меня получилось создать только такой запрос:
SELECT swows.n_show, roles.n_role, employees.fio_emp
FROM swows, roles, showroles, roleactor, employees, showactor
WHERE showroles.id_role = roles.id_role
AND showroles.id_show = swows.id_show
AND roleactor.id_emp = employees.id_emp
AND roleactor.id_role = roles.id_role
Он просто показывает, какие роли кем были сыграны в конкретных спектаклях. Подскажите, пожалуйста. Спасибо.

Решение задачи: «Запрос в MySQL»

textual
Листинг программы
WITH q AS (SELECT 'Иванов' AS fio, 'Грозный' AS show, 'Иван' AS ROLE  FROM dual UNION ALL
SELECT 'Иванов' AS fio, 'Грозный' AS show, 'Петька' AS ROLE  FROM dual UNION ALL
SELECT 'Петров' AS fio, 'Грозный' AS show, 'Иванов' AS ROLE  FROM dual UNION ALL
SELECT 'Иванов' AS fio, 'Чайка' AS show, 'Чайка' AS ROLE  FROM dual UNION ALL
SELECT 'Сидоров' AS fio, 'Чайка' AS show, 'Дублёр чайки' AS ROLE  FROM dual UNION ALL
SELECT 'Петров' AS fio, 'Чайка' AS show, 'Жертва чайки' AS ROLE  FROM dual)
SELECT fio, show FROM q
GROUP BY fio, show
HAVING COUNT(ROLE) > 1

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

  1. Создаётся представление (Common Table Expression) q с помощью оператора WITH.
  2. В теле представления происходит выборка данных из таблицы dual (в данном случае это может быть любая таблица, например, information_schema.users).
  3. В выборке указываются имена столбцов и их значения для каждой строки.
  4. Затем происходит выборка данных из представления q с помощью оператора SELECT.
  5. В результате выборки выбираются только столбцы fio и show.
  6. С помощью оператора GROUP BY происходит группировка строк по столбцам fio и show.
  7. С помощью оператора HAVING производится фильтрация строк по условию COUNT(ROLE) > 1, то есть выбираются только те строки, в которых количество значений столбца ROLE больше одного.

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

9   голосов , оценка 3.889 из 5