SQL-запрос с использованием JOIN

#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. Я хочу перечислить название фильма и ведущего актера для всех фильмов «Джули Эндрюс»