使用group_concat在INNER JOIN mysqli select语句中进行具体说明

问题描述 投票:0回答:1

我有一个类似于下面的表,我正在尝试使用mysqli_query来获取不具有流派'Love'的电影。

create table movies (movieid int(1), title varchar(20),
                     plot varchar(20), rating int(2),
                     director  varchar(20));
create table genres (genreid int(1), genre varchar(20));
create table moviegenres (moviegenresid int(1), movieid int(1),
                          genreid int(1));

insert into movies values
(1, 'movie1', '',   10 , '');
(2, 'movie2', '',   10 , '');
(3, 'movie3', '',   10 , '');
(3, 'movie4', '',   10 , '');
insert into genres values
(1, 'Horror'),
(2, 'Thriller'),
(3, 'Action'),
(4, 'Love');
insert into moviegenres values
(1, 1, 2),
(2, 1, 3);
(3, 1, 4),
(4, 2, 2);
(5, 2, 3);

使用此查询,我可以获取特定类型的电影,例如'动作'

select m.*,group_concat(g.genre)
from movies m inner join moviegenres mg
on m.movieid=mg.movieid
inner join genres g
on g.genreid=mg.genreid
where g.genre = 'Action'
group by m.movieid
;

但是如果我这样查询以得到想要的结果,则得到不具有'Love'类型的电影。

select m.*,group_concat(g.genre)
from movies m inner join moviegenres mg
on m.movieid=mg.movieid
inner join genres g
on g.genreid=mg.genreid
where g.genre != 'Love'
group by m.movieid
;

结果中我仍然有'movie1'和'movie2',但是我试图只获得'movie2',因为那是唯一一部没有'Love'风格的电影。

mysql sql database mysqli
1个回答
0
投票

删除where并使用having

having sum(g.genre = 'Love') = 0 and
       sum(g.genre = 'Action') > 0
© www.soinside.com 2019 - 2024. All rights reserved.