SQL查询从2个表中检索数据

时间:2013-12-24 16:24:15

标签: sql

你能帮我找一些相当容易的东西吗?我的头脑无法解决

我有两张桌子:

  • 表1 =电影
  • 表2 =演员

假设我有3部电影:独立日,水库犬和阿甘正传。

我还有7位演员:Will Smith,Jeff Goldblum,Quentin Tarantino,Michael Madsen,Tim Roth,Tom Hanks,Robin Wright Penn。

假设我想运行一个查询,这将为Will Smith和Jeff Goldblum带来正确的电影。查询应该如何?

这应该很容易,但我现在觉得很蠢。

提前致谢!

3 个答案:

答案 0 :(得分:2)

您应该使用与Actors匹配Movies的表格。将其称为AppearsIn,并将两列MovieIdActorId对应一部电影与特定演员。您正在尝试生成的内容称为“多对多”关系,您应该查看更多有关如何为此数据集生成查询和模式的示例。

答案 1 :(得分:1)

要设置电影/演员关系,您需要三张桌子而不是两张桌子。

**Movies**
Id, Title

**Actors**
Id, Name

**MovieActors**
MovieId
ActorId

您可以通过演员使用以下内容查询电影:

select m.* from movies m
inner join MovieActors ma on ma.MovieId = m.Id
inner join Actors a on a.Id = ma.ActorId
where (a.Name = 'Will Smith' OR a.Name = 'Jeff Goldblum')

只需更改where子句即可根据actor获取不同的电影。确保你也不要让自己接受sql注入。

祝你好运!

答案 2 :(得分:1)

假设您有三个表:[电影],[演员]和[出现在]。后者将电影与演员配对。

Table [Movies] columns:
[MovieId] (uniqueidentifier, primary key)
[MovieTitle] (varchar)
...

Table [Actors] columns:
[ActorId] (uniqueidentifier, primary key)
[ActorName] (varchar)
...

Table [AppearsIn] columns:
[AppearsIn_ActorId] (uniqueidentifier, foreign key on [Actors].[ActorId])
[AppearsIn_MovieId] (uniqueidentifier, foreign key on [Movies].[MovieId])

然后:

SELECT [MovieTitle] FROM [Movies]
INNER JOIN [AppearsIn] ON [AppearsIn].[AppearsIn_MovieId] = [Movies].[MovieId]
INNER JOIN [Actors] ON [Actors].[ActorId] = [AppearsIn].[AppearsIn_ActorId]
WHERE [Actors].[ActorsName] IN ('Will Smith', 'Jeff Goldblum')