2015-03-29 4 views
-1

Еще раз ... с небольшими знаниями Я вынужден публиковать идиотские вопросы об этом, и еще раз поможет и намеки будут высоко оценены.Проблемы снова с SQL-запросом

Ситуация - Перечислите имя и фамилию всех звезд кино, которые появились в более чем двух фильмах, которые были номинированы, по крайней мере, на две премии Академии и имеют средний рейтинг критиков 4 или менее.

.. И еще раз этот код неправильный, так как мне нужно присоединиться к 3 таблицам (я едва успеваю сделать это с присоединением 2), но это как-то близко к пониманию, так как мое знание приносит мне.

SELECT STAR.starFirstName, STAR.starLastName 
    FROM (STAR INNER JOIN MOVSTAR ON STAR.starID=MOVSTAR.starID) 
    INNER JOIN MOVIE ON MOVSTAR.mvID=MOVIE.mvID) 
    WHERE MOVIE.noms >=2 
    AND critRate <4; 
+0

'critRate <= 4' даст вам« средний рейтинг критика 4 или менее ». Что вы получаете прямо сейчас? –

+0

Насколько я ненавижу говорить это, часть critRate, которую я считаю верной, но в целом этот код неверен .. надеялся на рекомендации относительно того, как это исправить. –

+0

Возможно, это не важно для такого базового запроса, но вы всегда должны добавлять тег для своей СУБД. Postgres, Oracle, DB2, ... –

ответ

0

попробовать:

SELECT STAR.starFirstName, STAR.starLastName 
    FROM STAR 
      JOIN MOVSTAR 
       ON STAR.starID = MOVSTAR.starID 
      JOIN MOVIE 
       ON MOVSTAR.mvID = MOVIE.mvID 
    WHERE MOVIE.noms >= 2 
    AND critRate <= 4 
+0

Дает мне исходный код ошибки «Синтаксическая ошибка в предложении FROM» –

+0

убедитесь, что STAR, MOVSTAR и MOVIE - это таблицы – NoobCS

+0

Да, это таблицы наверняка. STAR содержит MOVIESTARS, упомянутый в предложении, MOVSTAR содержит MovieID и StarID, чтобы показать, какие звезды появились, в каких фильмах и в таблице MOVIE отображается список фильмов. –

0

Вам нужен GROUP BY, чтобы получить среднюю оценку для актера. HAVING используется для условий для агрегатных функций.

SELECT STAR.starFirstName, STAR.starLastName 
FROM STAR 
    INNER JOIN MOVSTAR ON STAR.starID = MOVSTAR.starID 
    INNER JOIN MOVIE ON MOVSTAR.mvID = MOVIE.mvID 
WHERE MOVIE.noms >= 2 
GROUP BY STAR.starFirstName, STAR.starLastName 
HAVING AVG(critRate) < 4 
    AND COUNT(*) >= 2 
+0

Приветствия за помощь! После игры с этим кодом, мне удалось получить его работу с «SELECT STAR.starFirstName, STAR.starLastName FROM ((STAR ​​INNER JOIN MOVSTAR ON STAR.starID = MOVSTAR.starID) INNER JOIN ФИЛЬМА НА MOVSTAR.mvID = MOVIE.mvID) WHERE MOVIE.noms> = 2 GROUP BY STAR.starFirstName, STAR.starLastName HAVING AVG (critRate) <4 И COUNT (*)> = 2' –

+0

Great! (Является ли факультативные круглые скобки вашим единственным изменением? Где эти требования? Какие dbms procuct?) – jarlh

+0

А, я также переместил «STAR», где у вас было FROM STAR INNER STAR JOIN..etc и т. Д. Я изменил его на FROM ((STAR INNER ..etc, потому что кажется, что ваше кодирование не работает в Microsoft Access, но небольшое изменение заставило его работать –