mySQL JOIN列和count在一个表上不同,并在其他表上获得更多值

时间:2011-06-24 23:21:53

标签: mysql

我正在做一个数据库来整理我的电影。我有两张桌子(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表上获得演员/女演员的性别和形象。

已经尝试了所有不同类型的查询但到目前为止没有结果:(

任何人都可以帮我这个吗?

2 个答案:

答案 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)