【问题标题】:How can I retrieve data from 3 tables in mysql - join assistance?如何从 mysql 中的 3 个表中检索数据 - 加入帮助?
【发布时间】:2014-07-29 10:49:33
【问题描述】:

表格布局:

您好,我想从上述表格中检索信息组合,主要是“episode”表格中的单行结果,以及“tvshow”表格和“season”表格中的一些信息,即也仅适用于我想从“episode”表中检索的那一行,这是我目前的查询:

Select tvshow.series_name, season.season_banner, season.season_poster, episode.season_num, episode.episode_num, episode.episode_name, episode.plot
FROM tvshow,season,episode
WHERE episode.tvshow_id = 1 AND episode.season_num = 1 and episode.episode_num = 1

我知道我需要使用联接,但我不确定如何执行此操作,以合并 3 个表的结果。

我最接近返回单行的是:

SELECT tvshow.series_name, season.season_banner, season.season_poster, episode.season_num, episode.episode_num, episode.episode_name, episode.plot
FROM episode
INNER JOIN tvshow ON episode.tvshow_id = tvshow.tvshow_id
INNER JOIN season ON episode.season_num = season.season_num
WHERE episode.tvshow_id =1
AND episode.season_num =1
AND episode.episode_num =1

返回我想要的行,但除了仅存在于季节表(季节横幅和海报)中的字段为空白之外,还返回相同的第二行。

【问题讨论】:

标签: mysql sql join multiple-tables


【解决方案1】:
   First you need to normalize your data base.
   Your table structure like thata  
        tvshow -->   tv_id as  primary key
        season -->   tv_id as foreign key 
        episode -->  tv_id as foreign key 

   Your join query 

    Select tvshow.series_name, season.season_banner, season.season_poster, episode.season_num, episode.episode_num, episode.episode_name, episode.plot 
    FROM tvshow 
    JOIN season on season.tv_id= tvshow.tv_id
    JOIN episode on episode.tv_id= tvshow.tv_id
    WHERE episode.tv_id = 1 

【讨论】:

  • 那个连接查询让我从 id 不匹配 1 的电视节目中得到结果。关于规范化,我希望将 seasons 表中的复合主键链接为外键到情节表中的相同值,但我被告知尚不支持。
【解决方案2】:

使用左连接

select ts.series_name,ss.season_banner,es.season_num from tvshow as ts inner join season as ss on ss.tvshow_id=ts.tvshow_id inner join episod as es on ss.season_num=es.season_num where ts.tvshow_id=1 and ss.season_num=2 and es.episode_num=1;

【讨论】:

  • 修复了季节问题,但如果我将 tvshow_id 设置为 2,那么它会出现与以前相同的问题,但这次使用的是 tvshow 表中的 series_name。
  • 不,它仍然返回 tvshow_id 为 2、季节为 1 且情节为 1 的值。
  • 你想要什么结果?
  • 我想要这样,如果剧集表中除了三个值的组合(show id、season num & episode num)之外没有任何值,它不会返回任何内容。跨度>
  • 表示您希望结果中的哪个字段?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 2019-03-13
  • 2017-04-12
  • 2012-03-05
  • 2011-12-23
相关资源
最近更新 更多