问题描述
||
我正在做一个数据库来组织我的电影。我有两张桌子(一张是电影,一张是演员)。简单地说,并为此练习省略了无用的字段
Table MOVIE:
id_movie | name_movie | star1 | star2 | star3 | runtime
Table ACTOR:
id_actor | name | sex | image
有些电影中,例如star1是\“ Morgan Freeman \”,但在其他电影中,“ Morgan Freeman \”在star2字段中。
我想从MOVIE表中的star1,star2,star3的UNION
中计算出disTINCT
值,然后在ACTOR桌上获取演员的性别和图像。
已经尝试了所有不同类型的查询,但到目前为止没有结果:(
有人可以帮我吗?
解决方法
@Tom Green的解决方案非常接近...除了在查询中需要使用“ DISTINCT \”外。
但是,对于不同的演员,您已经有了一个演员表,可以直接从该表查询,无论演员出演的电影是什么,演员和女演员都应该是唯一的。
但是,如果您想了解与其他人在同一电影中的不同演员,那么我实际上会通过使用“桥”来将数据库结构调整为更灵活的结构,从而根据需要允许尽可能多的“明星” \“或\”链接\“表...提供1:许多关系
Table MOVIE:
id_movie | name_movie | star1 | star2 | star3 | runtime
Table MovieActor:
id_movieactor | id_movie | id_actor (star)
Table ACTOR:
id_actor | name | sex | image
要在此处填充MovieActor表,您可以...
insert into MovieActor ( id_movie,id_actor )
select id_movie,star1 as id_actor
from movie
where star1 > 0
union
select id_movie,star2 as id_actor
from movie
where star2 > 0
union
select id_movie,star3 as id_actor
from movie
where star3 > 0
这样一来,您可以限制每部电影的星星数量,但最少可以拥有1个星星,而又不会浪费其他星星的空间...那么,将来,您希望通过向电影中添加第4颗星星来调整查询,您将调整多少个查询...
无论如何,完成此操作后,您可以查询到以下简单内容
select distinct ma.id_actor,actor.*
from MovieActor ma join Actor on ma.id_actor = actor.id_actor
如果您还有其他类型的查询类型示例,可能要冒充数据库,我可以轻松提供补充查询...
, 看来您正在使用NAME字段加入ACTOR,这有点怪异-理想情况下,您希望使用ACTOR_ID进行加入,但是无论如何,在以下假设下,下面的查询应该可以满足您的要求:
select name,sex,image
from actor
where name in
(select star1 as star from movie
union
select star2 as star from movie
union
select star3 as star from movie)