2016-10-02 2 views
1

Учитывая несколько таблиц, я пытаюсь написать запрос, который возвращает имена, удовлетворяющие определенному предложению счетчика.Имя запроса SQL-запроса и количество определенных атрибутов для нескольких таблиц

У меня есть таблицы:

genre(genre, movieid) 
moviedirectors(movieid, directorid) 
directors(directorid, firstname, lastname) 

Я хочу написать запрос, который возвращает имя и фамилию директоров, направленных, по крайней мере 50 фильмов в жанре комедии, и возвращает этот номер, а также.

Это то, что у меня есть

select d.fname, d.lname, count(*) 
from genre g, directors d, moviedirectors md 
where g.genre='Comedy' and g.movieid=md.movieid and  
        md.directorid=d.directorid 
group by d.id 
having count(*) >= 50 

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

+0

Насколько велика ваша таблица? Обратите внимание, что вы включаете неагрегатные столбцы в предложение 'SELECT', которое даже не запускалось в большинстве баз данных (q.v. ответ от @varontron ниже). –

+0

Это похоже на проблему с домашней работой, которая у меня была в классе mooc. – Marichyasana

ответ

0

вам нужно внутренние соединения:

SELECT d.fname 
     d.lname 
FROM genre g 
INNER JOIN moviedirectors md 
    ON g.movieid = md.movieid 
INNER JOIN directors d 
    ON md.directorid = d.directorid 
WHERE g.genre = 'Comedy' 
GROUP BY d.fname,  -- group by columns in select 
     d.lname 
HAVING COUNT(*) >= 50 
+0

Есть ли разница между вводом INNER JOIN и JOIN. Раньше я использовал JOIN, и он не работал. Также почему вы группировали по d.fname, d.lname, а не по d.id? – Misohappi

+0

@Misohappi. , , «INNER JOIN» и «JOIN» - это одно и то же. –

0

выберите c.firstname, c.lastname, граф (e.movieid) из (выбрать * из директоров в кино, где б b.genre = «Comedy. 'и b.movieid = a.movieid) d, директора c, где c.directorid = d.directorid group по e.movieid со счетом (e.movieid)> 50;

Смежные вопросы