我想要帮助如何解决这个SQL问题。 假设我有3张桌子
我想选择所有类型为1和类型3的电影
这怎么可能?
我只能选择1种类型的电影而不能使用
SELECT Movie.ID, Movie.Name
FROM Movies
INNER JOIN Movie_Genre ON Movie_Genre.FK_MovieID=Movie.ID
AND Movie_Genre.FK_GenreID = 1
答案 0 :(得分:2)
使用:
SELECT m.id,
m.name
FROM MOVIE m
JOIN MOVIE_GENRE mg ON mg.fk_movieid = m.id
AND mg.fk_genreid IN (1, 3)
GROUP BY m.id, m.name
HAVING COUNT(DISTINCT mg.fk_genreid) = 2
最后一行是获取两种类型的行的关键--DISTINCT意味着重复的关联(IE:类型1的两个实例)将被忽略,因为它们是误报。但是计数必须等于你要寻找的流派数量。
但所有数据库不支持COUNT(DISINCT
。您应该提及您正在使用的内容 - 如果不是标记,则在问题中......如果MOVIE_GENRE
表的主键同时是fk_movieid
和 {{1那么这不是问题。接下来最好的事情是两列都在一个唯一的约束/索引......