如何获得满足我的计数中的语句的值?

时间:2018-05-28 16:28:46

标签: mysql

我试着展示每一对演员,这两位演员都没有演过任何人 普通电影类型,同时与另一个播放的类型一起播放的类型至少为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)

将条件添加到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;