Как получить значения, которые соответствуют заявлению в моем счете?

0

Я стараюсь отображать каждую пару актеров, оба актера не играли ни на один общий жанр фильма, в то время как жанр, который один играл вместе с жанром, который играл другим, был по меньшей мере 7

Я сделал это:

select a1.actor_id as i8opoios1,a2.actor_id as i8opoios2,((count(distinct(g1.genre_name))+count(distinct(g2.genre_name)))>=7) as result from actor as a1
inner join actor as a2 on a1.actor_id!=a2.actor_id

inner join role as r1 on a1.actor_id=r1.actor_id
inner join movie as m1 on m1.movie_id=r1.movie_id
inner join movie_has_genre as mg1 on mg1.movie_id=m1.movie_id
inner join genre as g1 on mg1.genre_id=g1.genre_id

inner join role as r2 on a2.actor_id=r2.actor_id
inner join movie as m2 on m2.movie_id=r2.movie_id
inner join movie_has_genre as mg2 on mg2.movie_id=m2.movie_id
inner join genre as g2 on mg2.genre_id=g2.genre_id

where a1.actor_id<a2.actor_id and mg1.genre_id!=mg2.genre_id 
group by a1.actor_id,a2.actor_id;

Этот запрос возвращает мне все пары актеров, которые не играли ни на одном распространенном жанре кино, и в результате 1 (TRUE), если в сочетании они играли в 7 или более жанрах и 0 (FAlSE), если они не имели. Мой вопрос: если кто-то имеет представление о том, как я могу вернуть только истинные утверждения.

Tables and their columns:

actor(actor_id,name)
role(actor_id,movie_id)
movie(movie_id,title)
movie_has_genre(movie_id,genre_id)
genre(genre_id,gender_name)
  • 1
    Под полом ты понимаешь жанр ? Первый указывает на пол (то есть мужской / женский), а последний указывает на жанр (например, драма / комедия) фильма.
  • 0
    Отредактируйте ваш вопрос и добавьте пример (всего несколько строк) результата вашего запроса.
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Добавьте условие в предложение where, чтобы ограничить строки.

SELECT 
    a1.actor_id as i8opoios1,
    a2.actor_id as i8opoios2,
    IF((count(distinct(g1.genre_name))+count(distinct(g2.genre_name)))>=7,1,0) as result 
FROM actor as a1
INNER JOIN actor as a2 
    on a1.actor_id != a2.actor_id
INNER JOIN role as r1 
    on a1.actor_id = r1.actor_id
INNER JOIN movie as m1 
    on m1.movie_id = r1.movie_id
INNER JOIN movie_has_genre as mg1 
    on mg1.movie_id = m1.movie_id
INNER JOIN genre as g1 
    on mg1.genre_id = g1.genre_id
INNER JOIN role as r2 
    on a2.actor_id = r2.actor_id
INNER JOIN movie as m2 
    on m2.movie_id = r2.movie_id
INNER JOIN movie_has_genre as mg2 
    on mg2.movie_id = m2.movie_id
INNER JOIN genre as g2 
    on mg2.genre_id = g2.genre_id
WHERE a1.actor_id < a2.actor_id 
    AND mg1.genre_id != mg2.genre_id 
HAVING IF((count(distinct(g1.genre_name))+count(distinct(g2.genre_name)))>=7,1,0) = 1
GROUP BY a1.actor_id,a2.actor_id;
  • 0
    Это говорит о недопустимом использовании групповой функции. Я подумал, что-то подобное, и у меня была та же ошибка.
  • 0
    я удалил условие if, откуда и я запустил его снова. Тот же результат с моим
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню