独特的数字和至少出现在一部喜剧中的明星名字

时间:2015-10-08 21:19:17

标签: sql database oracle performance relational-database

我有一个包含多个表的数据库。

Film (filmID, title, filmCatagory)
FilmCast (filmID, filmStarID, filmStarName)
FilmStar (filmStarID, filmStarName, birthplace).
电影实体陈述了有关电影的所有信息,FilmCast将这两张桌子连在一起作为一种方式来展示哪部电影明星在哪部电影中扮演的角色,FilmStar都有关于所有明星的信息。我需要将以下问题转换为SQL查询:

列出至少出现在一部喜剧中的所有明星的唯一数字和名称。

我理解将使用连接,但不确定此查询将如何与这三个表一起使用。

3 个答案:

答案 0 :(得分:2)

找出所有出现在喜剧中然后出现在GROUP BY中的电影明星。

SELECT s.filmStarID, s.filmStarName, COUNT(*)
FROM FilmStar s
INNER JOIN FilmCast c ON c.filmStarID = s.filmStarID
INNER JOIN Film f ON f.filmID = c.filmID
WHERE f.filmCategory = 'Comedy'
GROUP BY s.filmStarID, s.filmStarName

答案 1 :(得分:0)

您可以使用带有EXISTS的SELECT查询:

SELECT
  filmStarID,
  filmStarName,
  birthplace
FROM
  FilmStar
WHERE
  EXISTS (
    SELECT *
    FROM
      Film INNER JOIN FilmCast
      ON Film.FilmID = FilmCast.FilmID
    WHERE
      Film.filmCatagory='Comedy'
      AND FilmCast.filmStarID = FilmStar.filmStarID
  )

答案 2 :(得分:0)

您是否尝试过

的内容
SELECT DISTINCT(filmStarID), filmStarName FROM FilmStar 
INNER JOIN FilmCast ON FilmStar.filmStarID = FilmCast.filmStarID 
INNER JOIN Film ON FilmCast.filmID = Film.filmID 
WHERE filmCategory = ‘Comedy’;

连接的想法是在内存中创建一个包含所需数据的大表。你想根据类别获得filmStarID和filmStarName,但是你不能将FilmStar表直接连接到Film类别(它们没有共同的列),所以你将它们加入到FilmCast表中,与每个列相同的列。