mySQL在一个表上连接列并计数,在另一个表上获取更多值

mySQL在一个表上连接列并计数,在另一个表上获取更多值,mysql,Mysql,我正在做一个数据库来组织我的电影。我有两张桌子(一张是电影桌,一张是演员桌)。简单地说,省略这个练习中无用的字段 Table MOVIE: id_movie | name_movie | star1 | star2 | star3 | runtime Table ACTOR: id_actor | name | sex | image 有些电影的明星1是“摩根·弗里曼”,而其他电影的明星2是“摩根·弗里曼” 我想从桌上电影中的明星1、明星2、明星3的联合中计算不同的值,然

我正在做一个数据库来组织我的电影。我有两张桌子(一张是电影桌,一张是演员桌)。简单地说,省略这个练习中无用的字段

Table MOVIE: 
    id_movie | name_movie | star1 | star2 | star3 | runtime

Table ACTOR: 
    id_actor | name | sex | image
有些电影的明星1是“摩根·弗里曼”,而其他电影的明星2是“摩根·弗里曼”

我想从桌上电影中的明星1、明星2、明星3的
联合中计算
不同的
值,然后在桌上获得演员的性别和形象

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


有人能帮我一下吗?

看起来您正在使用NAME字段加入ACTOR,这有点奇怪——理想情况下,您可能希望使用ACTOR\u 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)

@Tom Green的解决方案非常接近……除了需要在他的查询中使用“独特”之外

然而,不同的演员,你已经有了一个演员表,直接从中查询,这应该是唯一的演员和女演员,无论他们在电影中的特点

但是,如果您想知道与其他人在同一部电影中的不同演员,我会将您的数据库结构调整为更灵活的结构,通过使用“桥”或“链接”表,允许您需要多少“明星”…提供1:many关系

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
这样,你的每部电影的明星数量是不受限制的,但至少可以有一个明星,而不会浪费其他人的空间…然后,在未来,你想通过在电影中添加一个可能的第四明星来调整你的查询,你将调整多少查询

无论如何,一旦这样做了,您就可以像

select distinct ma.id_actor, actor.*
   from MovieActor ma join Actor on ma.id_actor = actor.id_actor

如果你有其他一些查询类型的例子,你可能会提出从你的数据库中出来,我可以很容易地提供补充查询…

@Tom Green和@DRapp:谢谢你的及时回复,伙计们!想不到我会这么快得到答案!!我知道我的数据库的结构不是最好的,所以我利用这个机会来做你们告诉我的我知道只允许3名演员是一个小缺陷,但我认为这是一个可以简化事情的数字。@DRapp:尝试用该查询填充新表,并插入了0行:|另外:我最初的想法是为每个演员或演员显示前10名电影…我如何使用新表准备好了吗?无论如何…非常感谢!:)@Afonso Gomes,我刚刚创建了3个表结构并运行了插入。。。它失败了。。。然后我想起。。。我需要将“id_MovieActor”作为“自动递增”列。。。然后它成功了。至于排名前十的电影,什么构成排名前十的电影。。。这里没有什么可以量化的…@DRapp:很可能我忘记了那个“小”细节:)试过了。。。未填充创建的新表:|不知道这里缺少什么。如果我删除“WHERE star1>0”,它将填充表,但未填充列id_actor。刚刚解决了问题(我认为):在新表上,我将id_actor设置为INT(4),此查询将从表MOVIES中选取star1、star2和star3(varchars),而不是将其替换为表actor上存在的actor的id。。。我说得对吗?到目前为止,我制作了所有作品的打印屏幕,请在这里查看[链接]!非常感谢您对本主题(以及您认为适合我做的任何其他事情)的所有帮助!只是现在我正在释放mySQL的全部潜能!谢谢对我来说似乎很简单!:)我使用了你的查询,但它只列出了一些演员,比如:摩根·弗里曼| M | 123.jpg。。。我还想计算一下他的名字出现在star1 star2和star3总和上的次数。。。这有可能吗,伙计?