«Определите, есть ли в одном фильме актеры с таким же именем».
Это моя задача, и я должен делать это с помощью подзапросов, и я просто не знаю, что еще делать. Я пробовал все с группировкой, порядком и подсчетом, но я просто не дошел до точки, когда я получаю актеров с одинаковыми именами в одном фильме.
Может кто мне поможет? Я использую базу данных Sakila
SELECT
a.first_name
,(a.last_name)
,a.actor_id
, f.title
FROM actor a
JOIN film_actor fa ON fa.actor_id = a.actor_id
JOIN film f ON f.film_id = fa.film_id
JOIN(SELECT b.first_name, COUNT(*)
FROM actor B
GROUP BY b.first_name
HAVING COUNT(*) > 1 ) b
ON a.first_name = b.first_name
GROUP BY a.last_name
HAVING COUNT(f.title) > 1
ORDER BY a.first_name
2 ответа
Вы можете сделать это только с объединениями:
select f.title, a1.first_name, a1.last_name as last_name_1, a2.last_name as last_name_2
from film f
inner join film_actor fa1 on fa1.film_id = f.film_id
inner join film_actor fa2 on fa2.film_id = f.film_id
inner join actor a1 on a1.actor_id = fa.actor_id
inner join actor a2 on a2.actor_id = fa.actor_id
where a1.first_name = a2.first_name and a1.actor_id < a2.actor_id
Начиная с таблицы film
, она дважды отслеживает отношения от actor
до film_actor
, а затем фильтрует различные акторы с одинаковыми именами.
В результате вы получаете кортежи актеров с одинаковой фамилией, сыгравших в одном фильме. Условие неравенства гарантирует отсутствие «зеркальных» записей (то есть каждый кортеж появляется только один раз на фильм).
Я бы просто использовал агрегацию:
SELECT fa.film_id, a.first_name,
GROUP_CONCAT(a.last_name) as last_names,
GROUP_CONCAT(a.actor_id) as actor_ids
FROM actor a JOIN
film_actor fa
ON fa.actor_id = a.actor_id
GROUP BY fa.film_id, a.first_name
HAVING COUNT(*) > 1;
В вашем вопросе не указано, как должен выглядеть набор результатов. Это возвращает одну строку для каждого актера с одинаковым именем в фильме. Фамилии объединяются в строку, как и идентификаторы актеров.
Похожие вопросы
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.