«Определите, есть ли в одном фильме актеры с таким же именем».

Это моя задача, и я должен делать это с помощью подзапросов, и я просто не знаю, что еще делать. Я пробовал все с группировкой, порядком и подсчетом, но я просто не дошел до точки, когда я получаю актеров с одинаковыми именами в одном фильме.

Может кто мне поможет? Я использую базу данных 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
-1
Samtacion 22 Ноя 2020 в 20:03

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, а затем фильтрует различные акторы с одинаковыми именами.

В результате вы получаете кортежи актеров с одинаковой фамилией, сыгравших в одном фильме. Условие неравенства гарантирует отсутствие «зеркальных» записей (то есть каждый кортеж появляется только один раз на фильм).

2
GMB 22 Ноя 2020 в 17:33

Я бы просто использовал агрегацию:

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;

В вашем вопросе не указано, как должен выглядеть набор результатов. Это возвращает одну строку для каждого актера с одинаковым именем в фильме. Фамилии объединяются в строку, как и идентификаторы актеров.

2
Nikos M. 23 Ноя 2020 в 09:37