帮助加入2多个表的SQL查询

时间:2010-08-21 22:58:58

标签: sql sql-server database sql-server-ce aggregate-functions

我想要帮助如何解决这个SQL问题。 假设我有3张桌子

电影

  • ID
  • 姓名

类型

  • ID
  • 名称

Movie_Genre(这是许多人的链接)

  • FK_MovieID
  • FK_GenreID

我想选择所有类型为1和类型3的电影 这怎么可能?
我只能选择1种类型的电影而不能使用

选择2种类型的电影
    SELECT Movie.ID, Movie.Name 
      FROM Movies
INNER JOIN Movie_Genre ON Movie_Genre.FK_MovieID=Movie.ID
                      AND Movie_Genre.FK_GenreID = 1

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那么这不是问题。接下来最好的事情是两列都在一个唯一的约束/索引......