#sql
#sql
Вопрос:
У меня есть эти таблицы
Movie a
id title yr score votes
-- -------------- ---- ----- -----
1 ‘Harry Potter’ 1985 9.98 2
2 ‘Beasdas’ 1985 5.28 3
actor b
id name
-- --------------
1 ‘Keanu Reeves’
casting c
movieid actorid ord
------- ------- ---
1 1 2
Я хочу перечислить название фильма и главного актера для всех фильмов «Джули Эндрюс».
Правильно ли это?
SELECT title, name
FROM movie a, actor b, casting c
WHERE title IN(SELECT title
FROM movie a, actor b, casting c
WHERE name = 'Julie Andrews' AND
a.id = c.movieid AND
b.id = c.actorid) AND
ord = '1' AND
a.id = c.movieid AND
b.id = c.actorid;
Комментарии:
1. Я думаю, что ваш оператор sql должен выдать желаемый ответ. Вы проверили это на своем компьютере? Разве это не дает правильный ответ?
Ответ №1:
Если вам нужны все результаты, в которых «Джули Эндрюс» является ведущим действующим лицом, то это то, что вам нужно:
SELECT a.Name, m.Name
FROM Actor a
INNER JOIN Casting AS c ON a.actorid = a.id AND c.ord = 1
INNER JOIN Movie AS m ON m.id = c.movieid
WHERE a.name = 'Julie Andrews'
С другой стороны, если вам нужны все фильмы, в которых ‘Джули Эндрюс’ сыграла роль, но не обязательно главную, тогда вам нужно следующее:
SELECT m.Title, a2.Name
FROM Movie AS m
INNER JOIN Casting AS c1 ON c1.movieid = m.id
INNER JOIN Actor AS a1 ON a1.id = c1.actorid AND a1.name = 'Julie Andrews'
INNER JOIN Casting AS c2 ON c2.movieid = m.id AND c2.ord = 1
INNER JOIN Actor AS a2 ON a2.id = c2.actorid
Надеюсь, это поможет!
Ответ №2:
Если вам нужно декартово произведение, оно может выглядеть следующим образом
SELECT title, name
FROM movie a, actor b, casting c
WHERE --conditions for joining ables
a.id = c.movieid AND
b.id = c.actorid and
--other conditions
b.name = 'Julie Andrews'
AND b.ord = '1'
но объединения лучше
select title, name
FROM movie a
join casting c on a.id = c.movieid
join actor b on b.id = c.actorid
where b.name = 'Julie Andrews' AND
b.ord = '1'
Комментарии:
1. Я использую декартово произведение… Вы имеете в виду, что мне не нужно ставить AND на условия для объединения таблиц и другие условия?
2. Декартово произведение (перекрестное соединение) очень хорошо объяснено в википедии en.wikipedia.org/wiki/Join_(SQL)
Ответ №3:
Не могли бы вы, пожалуйста, написать ожидаемый результат? Кажется, что есть три таблицы
1.Фильм 2.Актер 3.Кастинг Кастинг — это объединяющая таблица, которая содержит объединенную информацию о фильме и актере.
Комментарии:
1. Я хочу перечислить название фильма и ведущего актера для всех фильмов «Джули Эндрюс»