我需要从表格movie
获取所有列,其中genre.name =" action"
我有一张表genre
,其中包含genre.id和genre.name
我有另一张表movie2genre
,其中包含movieId和genreId
要按电影ID获取流派列表,我可以执行以下操作
SELECT name FROM movie2genre
JOIN Genre on Genre.id = movie2genre.GenreId
JOIN Movie on Movie.id = movie2genre.MovieId
WHERE Movie.id = 15664
但我不知道如何按流派名称
获取电影列表例如,从类型为“动作”的电影中选择所有内容。或者'惊悚片'
编辑。
我需要一个适用于'action' OR 'thriller'
和'action' AND 'thriller'
答案 0 :(得分:0)
我错过了什么吗?
SELECT movie.name FROM movie2genre
JOIN Genre on Genre.id = movie2genre.GenreId
JOIN Movie on Movie.id = movie2genre.MovieId
WHERE Genre.Name ='Action'
<强>更新强>
要执行AND子句,请使用
select name
from m
inner join mg on mg.movieid = m.movieid
inner join g on g.genreid = mg.genreid
where
g.genre = 'Action' or g.genre='Thriller'
group by name
having count(1) >= CASE WHEN OrClause then 1 else NumberOfGenresSupplied end
因此,在这种情况下,numberofGenresSupplied将等于2(您可以从提交的表单中获取此信息)。 如果你想要任何匹配的流派,OrClause将被设置为true,如果它必须匹配每个匹配的流派,则为false。
这将确保符合您的类型标准的不同电影列表。
答案 1 :(得分:0)
您可以使用WHERE子句来过滤类型,就像您在movieid上过滤一样。试试这个:
SELECT movie.name
FROM movie2genre
JOIN genre ON genre.id = movie2genre.genreid
JOIN movie ON movie.id = movie2genre.movieid
WHERE genre = 'action' OR genre = 'thriller';
修改强> 如果你想使用AND来获得两种类型,你可以做同样的连接,按照movieID分组并过滤2行。试试这个:
SELECT movie.name
FROM movie2genre
JOIN genre ON genre.id = movie2genre.genreid
JOIN movie on movie.id = movie2genre.movieid
WHERE genre = 'action' OR genre = 'thriller'
GROUP BY movie.id
HAVING COUNT(*) = 2;
答案 2 :(得分:0)
试试这个,它应该有效!
SELECT
m.*
FROM
Movie m
inner join movie2genre mg on m.MovieId = mg.MovieId
inner join Genre g on g.GenreId = mg.GenreId
WHERE
g.name = 'action' or g.name='thriller'
答案 3 :(得分:0)
OR案例很简单,您可以将其作为许多已显示的联接或作为EXISTS进行。 AND情况很棘手,因为你必须出去检查两个不同的行。您可以使用两个exists子句。
和...
SELECT name
FROM Movie
Where
EXISTS (
select *
from movie2genre
JOIN Genre on Genre.id = movie2genre.GenreId
where Movie.id = movie2genre.MovieId
and genre = 'action'
)
and
EXISTS (
select *
from movie2genre
JOIN Genre on Genre.id = movie2genre.GenreId
where Movie.id = movie2genre.MovieId
and genre = 'thriller'
)
... OR
SELECT name
FROM Movie
Where
EXISTS (
select *
from movie2genre
JOIN Genre on Genre.id = movie2genre.GenreId
where Movie.id = movie2genre.MovieId
and genre in ('action', 'thriller')
)
另一种方法可能是计算有多少movie2genre匹配(使用OR方法)。如果该数字大于零,则满足OR。如果数字等于所有可能的类型,则也满足AND。