我有一个包含多个表的数据库。
Film (filmID, title, filmCatagory)
FilmCast (filmID, filmStarID, filmStarName)
FilmStar (filmStarID, filmStarName, birthplace).
电影实体陈述了有关电影的所有信息,FilmCast将这两张桌子连在一起作为一种方式来展示哪部电影明星在哪部电影中扮演的角色,FilmStar都有关于所有明星的信息。我需要将以下问题转换为SQL查询:
列出至少出现在一部喜剧中的所有明星的唯一数字和名称。
我理解将使用连接,但不确定此查询将如何与这三个表一起使用。
答案 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表中,与每个列相同的列。