我正在做一个数据库来整理我的电影。我有两张桌子(1张电影用于演员)。为此练习简单而省略无用的字段
Table MOVIE:
id_movie | name_movie | star1 | star2 | star3 | runtime
Table ACTOR:
id_actor | name | sex | image
有些电影中star1就是“摩根·弗里曼”,但在其他电影中,“摩根·弗里曼”就是场上的明星。
我想从MOVIE表中的star1,star2,star3的DISTINCT
计算UNION
个值,然后在ACTOR表上获得演员/女演员的性别和形象。
已经尝试了所有不同类型的查询但到目前为止没有结果:(
任何人都可以帮我这个吗?
答案 0 :(得分:1)
@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
如果您有其他一些类型的查询示例,您可能会想要离开数据库,我可以轻松提供补充查询......
答案 1 :(得分:0)
看起来你正在使用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)