SQL вътрешно съединение с условие count() и релационна алгебра

Имам тези таблици:

  • Филми (id, name)

  • Актьори (idmovie, actor)

И бих искал да преброя броя на актьорите за всеки филм и след това да получа само филми с повече от 10 актьора. Имам запитване за преброяване на броя на актьорите за всеки филм, което върви по следния начин:

SELECT idmovie, count(actor) FROM Cast GROUP BY idmovie HAVING count(actor) > 10;

Сега се чудя как да получа този резултат и да го присъединя към таблицата Филми. Опитах:

SELECT name FROM Movies INNER JOIN (SELECT idmovie FROM Cast GROUP BY idmovie HAVING count(actor) >2) Cast ON Cast.idmovie = Movies.id;

Но не става.

Трябва също да го преведа на релационна алгебра.

π name (σ (count(σ id = idmovie))) Movies⨝Cast

Което очевидно не е наред...

Някаква помощ?


person Synor    schedule 12.10.2015    source източник
comment
Направете нормален INNER JOIN - няма нужда от подзаявки.   -  person PM 77-1    schedule 12.10.2015


Отговори (2)


Опитайте тази...

SELECT m.name, COUNT(c.actor) AS 'ActorsCount' 
FROM Movies m INNER JOIN [Cast] c ON m.id = c.idmovie
GROUP BY m.name HAVING COUNT(c.actor) > 10;
person japzdivino    schedule 12.10.2015
comment
Получих грешки при използването на 'ActorsCount' и [Cast], трябваше да премахна '' и []. Сега работи. Благодаря! - person Synor; 12.10.2015
comment
@Nicolas, ахм, може би поради вашите dbms затова получавате грешка, предполагам, че използвате sql сървър, така че написах какво искате да използвате sql сървър :), така или иначе важната е логиката и се радвам, че помагам. :) , следващия път маркирайте вашите dbms. :) - person japzdivino; 12.10.2015

Заявката ми изглежда правилна, освен може би, че сте добавили псевдоним към вложената заявка с Cast, което също е името на таблица. Не съм сигурен какъв ефект би имало това, но бих очаквал да обърка MySQL. Опитайте следното:

SELECT name FROM Movies INNER JOIN
(SELECT idmovie FROM Cast GROUP BY idmovie HAVING count(actor) >2) CastCount
ON CastCount.idmovie = Movies.id;

Не го пробвах, но мисля, че ще свърши работа

person Oliver Dain    schedule 12.10.2015