Запрос условия на основе двух обращений в одном столбце. sqlite3

#sql #sqlite

#sql #sqlite

Вопрос:

Я пытаюсь вставить в новую таблицу все названия фильмов, в которых снимались Хелена Бонхаб Картер и Джонни Депп. Сначала я выбираю информацию из таблицы с именем movies, которая имеет заголовок и идентификатор. а затем из таблицы с именем stars, в которой есть movie_id и person_id. и, наконец, я выбираю из таблицы с именем people, в которой есть столбцы id и name. Я думаю, что моя проблема в строке объединения, но я не знаю почему.

 CREATE TABLE jh( title TEXT)
INSERT INTO jh(title)
SELECT movies.title
FROM movies
WHERE movies.id in ( SELECT stars.movie_id FROM stars WHERE stars.person_id in(SELECT 
people.id FROM people WHERE people.name = ' Johnny Depp' UNION SELECT people.id FROM people 
WHERE people.name = 'Helena Bonham Carter'))
 

Ответ №1:

Вы можете объединять таблицы, фильтровать по нужным актерам, группировать по фильмам и задавать условие в предложении HAVING:

 SELECT m.title
FROM movies m
INNER JOIN stars s ON s.movie_id = m.id
INNER JOIN people p ON p.id = s.person_id
WHERE p.name IN ('Johnny Depp', 'Helena Bonham Carter')
GROUP BY m.id, m.title
HAVING COUNT(*) = 2 -- the number of the actors
 

Ответ №2:

Я действительно предлагаю вам не выполнять подобные запросы. например, вы можете выбрать все имена в одном единственном условии WHERE . И будьте готовы использовать JOIN, если вам нужно подключить несколько таблиц.

 SELECT M.Title
FROM Movies M INNER JOIN Stars S on M.id = S.Movie_Id 
INNER JOIN People P on S.PersonID = P.PersonID
WHERE P.Name in ('Johnny Depp','Helena Bonham Carter')