MySQL с использованием подзапроса без объединения - PullRequest
0 голосов
/ 22 ноября 2018

вот соответствующие таблицы

movie(id, title, relYear, category, runTime, director,
studioName, description, rating)

actor(aID, fName, surname, gender)

stars(movieID, actorID)

movGenre(movieID, genre) 

Я просто пытаюсь вернуть фильмы, в которых звезды «Майкла Фассбендера» используют подзапрос ... «id» в фильме относится к идентификатору фильма не идентификатор актера, если бы это было так, как я мог бы сделать

SELECT title, category
FROM movie 
WHERE 'id' =(SELECT 'aID'
             FROM actor
             WHERE fName='Michael' and surname='Fassbender')

Есть ли способ сделать это без использования каких-либо объединений?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018
SELECT DISTINCT m.title, m.category
FROM movie 
INNER JOIN stars s
ON s.movieID = m.id
INNER JOIN actors a
ON s.actorID = a.aID
   AND a.fName='Michael' 
   AND a.surname='Fassbender'
0 голосов
/ 22 ноября 2018

Вы можете использовать Коррелированный подзапрос с Exists()

SELECT m.title, m.category
FROM movie AS m
WHERE EXISTS (SELECT 1
              FROM stars AS s 
              JOIN actor AS a ON a.aID = s.actorID
              WHERE a.fName = 'Michael' AND 
                    a.surname = 'Fassbender' AND
                    s.movieID = m.id)

Вышеупомянутое решение по-прежнему использует JOIN в некотором роде (внутри подзапроса).Решение, в котором вообще не используется Join, может быть:

SELECT title, category
FROM movie
WHERE id IN (SELECT movieID 
             FROM stars 
             WHERE actorID IN (SELECT aID 
                               FROM actor 
                               WHERE fName = 'Michael' AND 
                                     surname = 'Fassbender'))

PS Если это не какое-то хитрое задание / HW, я бы настоятельно рекомендовал не использовать этот запрос в реальных приложениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...