【问题标题】:retrieve data from movie database从电影数据库中检索数据
【发布时间】:2012-01-04 07:55:02
【问题描述】:

我不是数据库专家,这肯定是一个新手问题。

我有一个包含电影数据的 SQLite 数据库。

主表(movies)包含:

  • movie_id(自动增量,主要);
  • 标题;
  • 年;
  • 其他字段;

然后我有 actors 表:

  • actor_id(自动增量);
  • 姓名;
  • 姓;

然后我有 cast 表:

  • movie_id(与电影表相关);
  • actor_id(与演员表相关,例如 Robin Williams);
  • character_name(角色的名字,例如“Mrs Doubtfire”);

在单个查询中,我应该检索给定电影的所有角色(在应用程序级别,我有要开始的当前电影的 id)、演员的姓名和电影列表 (!=这部当前的电影)该演员扮演的角色:

Character_name   |   Actor          |   Other movies where we've seen this actor
Mrs Doubtfire    |   Robin Williams |   Mork & Mindy, Dead Poets Society, ...
Other name       |   Other actor    |   Related movies,...

这可能吗?怎么样?

【问题讨论】:

    标签: sql database sqlite


    【解决方案1】:

    试试:

    select max(c.character_name) character_name,
           max(a.name) || ' ' || max(a.surname) actor,
           group_concat(distinct m.title) other_movies
    from cast c
    join actors a on c.actor_id = a.actor_id
    left join cast omc on c.actor_id = omc.actor_id and c.movie_id <> omc.movie_id
    left join movies m on omc.movie_id = m.movie_id
    where c.movie_id = ?
    group by a.actor_id
    

    【讨论】:

    • 这似乎可行,但我的无知有很多问题 :-) 其中之一是:为什么是“max”?
    • 那是因为我是按actor_id 分组的——在大多数SQL 中(MySQL 是一个例外),分组选择子句中的字段必须被聚合或包含在组子句中。在这种情况下(因为名称在功能上都依赖于 actor_id)我可以将名称添加到 group 子句而不影响查询的其余部分,但我发现只在必填字段 - 这意味着我必须在名称上使用聚合函数。
    • 马克,我要学习很多,但你的查询是一个很棒的起点;-)
    猜你喜欢
    • 2017-05-12
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2013-01-01
    相关资源
    最近更新 更多