我需要你的电影测验应用程序的帮助,该应用程序向用户提问并提出4个答案(1个右3个错误)。我必须找到应用程序的查询,但它似乎并不适合我。
这是表格的架构 -
表一(movies
)有4个值 - id(主键),标题(电影的标题),年份(发行年份),导演(电影导演)
表二(stars
)有3个值 - id(主键),first_name,last_name
表三(stars_in_movies
)有2个值 - movie_id,star_id(movie_id和star_id都是外键)
现在,对于问题:
我必须提出以下问题的查询,这些是我提出的问题。
影片x中的哪个明星?
select first_name,last_name
from stars_in_movies inner join stars
where movie_id=%s and star_id=id;
(这很好)
是谁导演了明星x?
select director
from movies inner join stars_in_movies
where star_id=%s and movie_id = id;
(这似乎不起作用)
电影x和y中出现哪个星?
select first_name,last_name
from stars_in_movies inner join stars
where (movie_id=%s and movie_id=%y) and star_id=id;
(这似乎也不起作用)
哪个明星没有出现在与明星x相同的电影中?
(我不知道如何处理这个问题,但我正在考虑制作一个辅助函数来挑选一个至少有3颗星的随机电影,然后在问题中使用1颗星,其他两颗作为错误的答案。然后找到另一个与第一颗星没电影的随机明星。但我不知道如何为它编写代码。
答案 0 :(得分:0)
哪颗星没有出现在与x星相同的电影中?
select first_name --All stars who have not acted with star X
from stars
where star_id not in
(
select star_id --All stars who have acted with star X
from stars_in_movies
where movie_id in
(
select movie_id --All movies in which star X has acted
from stars_in_movies
where star_id = "X"
)
)
- 电影x和y中出现哪个星?
select A.first_name
from stars A,
(
select star_id
from stars_in_movies
where movie_id = "X"
)B,
(
select star_id
from stars_in_movies
where movie_id = "Y"
)C
where A.star_id = B.star_id
AND B.star_id = C.star_id
是谁导演了明星X?
select director -- directors who have worked with star X
from movies
where movie_id in
(
select movie_id --All movies in which star X has acted
from stars_in_movies
where star_id = "X"
)