避免重复行,而不引用键或索引?

时间:2014-03-07 22:29:21

标签: mysql sql database

我有一个MySQL表,其中每一行都是电视剧集。它看起来像这样:

     showTitle  |  season   |  episode   |  episodeTitle  |  airdate  |  absoluteEpisode
 ----------------------------------------------------------------------------------------
 The X-Files          5          12          Bad Blood     1998-02-22         109
 The X-Files          5          13          Patient X     1998-03-01         110

(其中absoluteEpisode是从第1集算起的剧集总数。)

它使用我编写的Ruby程序填充,该程序从Web服务获取数据。我想定期再次运行该程序来获取新剧集。那么问题就是,如何避免添加已存在的行的副本?此表中的所有列都不适合用作主键或唯一字段。

我有两个想法。第一个是创建一个新列md5,其中包含所有这些值的MD5哈希值,并使其成为唯一列,以防止添加具有相同数据的两个行。这似乎会起作用,但要凌乱。

我的第二个是使用this solution from StackOverflow。但是,我无法让它发挥作用。我的SQL查询是

INSERT INTO `tv`.`episodes` (showTitle,episodeTitle,season,episode,date,absoluteEpisode) 
SELECT '#{show}','#{title}','#{y['airdate']}' FROM `tv`.`episodes`
WHERE NOT EXISTS (SELECT * from `tv`.`episodes` 
WHERE showTitle='#{show}' AND episodeTitle='#{title}' AND season='#{season_string}' AND episode='#{y['seasonnum']}' AND date='#{y['airdate']}' AND absoluteEpisode='#{y['epnum']}'")

#{...}位是Ruby变量。这让我明显错误You have an error in your SQL syntax

翻阅我可以在主题上找到的书籍和文档,我仍然不确定如何正确执行此查询,或者它不是解决我的问题的聪明方法。我很感激任何建议!

1 个答案:

答案 0 :(得分:0)

为什么不从showTitle,季节和剧集创建一个主键,这将解决问题,因为我猜因为剧集编号在同一季节不能重复,这适用于同一台电视节目,  示例

x-files ==>第1季==>第1集这将是主键作为一个单元