SQL select 与特定演员合作过的每个演员的演员和电影名称
SQL select the actor and movie name from every actor that has worked with a particular actor
这是一个HW作业,所以如果你能帮忙,请不要给出确切的答案;我要学习,不是别人给我做的。
(create table 语句在此 post 的末尾)
我的任务是使用 2 个查询,按电影名称排序,找到与汤姆·汉克斯一起出演过电影的所有演员。
到目前为止,我已经能够创建以下查询;我知道我的加入是错误的,但我不确定为什么。我怎么能以不同的方式思考这个问题?我觉得我很接近答案,但还不够。
SELECT actor.name, movie.title FROM actor
LEFT OUTER JOIN character.movie_id ON movie.id IN
(
-- Get the ID of every movie Tom Hanks was in
SELECT movie_id FROM actor
INNER JOIN character ON character.actor_id = actor.id
WHERE actor.name = 'Tom Hanks'
)
WHERE actor.name != 'Tom Hanks'
ORDER BY movie.title;
以下是架构的创建 table 语句:
create table actor (
id varchar(100),name varchar(100),
constraint pk_actor_id primary key (id));
create table movie(
id varchar(100),
title varchar(100),
year smallint unsigned,
mpaa_rating varchar(10),
audience_score smallint unsigned,
critics_score smallint unsigned,
constraint pk_id primary key(id));
create table character(
actor_id varchar(100),
movie_id varchar(100),
character varchar(100),
constraint pk_character_id primary key(movie_id, actor_id, character),
constraint fk_actor_id foreign key (actor_id) references actor (id),
constraint fk_movie_id foreign key (movie_id) references movie (id));
大概是这样的吧? FWTH 是 汤姆汉克斯的电影。
select mo.title, ac.name
from character ch join
(select m.movie_id
from character c join movie m on c.movie_id = m.id
join actor a on a.id = c.actor_id
where a.name = 'Tom Hanks'
) fwth on ch.movie_id = fwth.movie_id
join actor ac on ac.id = ch.actor_id
join movie mo on mo.id = fwth.movie_id
order by mo.title;
左外连接将为您提供左侧的每个条目 table(演员)。如果它右边有对应的值table,它就给你那个值,否则,你会得到一个返回的空值。
此外,您加入了 table。在您的查询中,您正在尝试加入一个列
这是一个HW作业,所以如果你能帮忙,请不要给出确切的答案;我要学习,不是别人给我做的。
(create table 语句在此 post 的末尾)
我的任务是使用 2 个查询,按电影名称排序,找到与汤姆·汉克斯一起出演过电影的所有演员。
到目前为止,我已经能够创建以下查询;我知道我的加入是错误的,但我不确定为什么。我怎么能以不同的方式思考这个问题?我觉得我很接近答案,但还不够。
SELECT actor.name, movie.title FROM actor
LEFT OUTER JOIN character.movie_id ON movie.id IN
(
-- Get the ID of every movie Tom Hanks was in
SELECT movie_id FROM actor
INNER JOIN character ON character.actor_id = actor.id
WHERE actor.name = 'Tom Hanks'
)
WHERE actor.name != 'Tom Hanks'
ORDER BY movie.title;
以下是架构的创建 table 语句:
create table actor (
id varchar(100),name varchar(100),
constraint pk_actor_id primary key (id));
create table movie(
id varchar(100),
title varchar(100),
year smallint unsigned,
mpaa_rating varchar(10),
audience_score smallint unsigned,
critics_score smallint unsigned,
constraint pk_id primary key(id));
create table character(
actor_id varchar(100),
movie_id varchar(100),
character varchar(100),
constraint pk_character_id primary key(movie_id, actor_id, character),
constraint fk_actor_id foreign key (actor_id) references actor (id),
constraint fk_movie_id foreign key (movie_id) references movie (id));
大概是这样的吧? FWTH 是 汤姆汉克斯的电影。
select mo.title, ac.name
from character ch join
(select m.movie_id
from character c join movie m on c.movie_id = m.id
join actor a on a.id = c.actor_id
where a.name = 'Tom Hanks'
) fwth on ch.movie_id = fwth.movie_id
join actor ac on ac.id = ch.actor_id
join movie mo on mo.id = fwth.movie_id
order by mo.title;
左外连接将为您提供左侧的每个条目 table(演员)。如果它右边有对应的值table,它就给你那个值,否则,你会得到一个返回的空值。
此外,您加入了 table。在您的查询中,您正在尝试加入一个列