这是对this question的更正,现在我正确理解了我需要做什么。
在MySQL中,我有一张电影表及其显示的日期以及其他栏目中的其他信息。
所以相关专栏是......
FilmID
FilmName
DateShown
日期存储为Unix时间戳。
我目前有多个电影实例在不同日期显示,但所有其他信息都是相同的。
我需要将复制影片的日期复制到与影片ID匹配的新表格中。然后我需要从原始表中删除重复的电影行。
所以我创建了一个新表,Film_Dates包含列
FilmDateID
FilmID
Date
任何人都可以帮助实际的sql来做到这一点。
谢谢。
答案 0 :(得分:1)
开始于:
insert into filmdateid (filmid, `date`)
select filmid, dateshown
from films
这应填充新表。
alter ignore table films
add unique (filmid)
这将强制执行filmid的唯一性,并删除所有重复项,只保留一行。如果此操作因重复条目失败而失败。错误,您需要运行此命令,然后再次尝试更改。
set session old_alter_table=1
因为看起来mysql正在逐渐远离能够这样做。
最后,您需要摆脱datehown列。
alter table films
drop column dateshown
在尝试任何此操作之前,请确保您有备份。总是最安全。
因为filmid没有重复,只有filmname,还有一些额外的步骤
首先,创建filmdates表:
create table filmdates as
select filmname, dateshown
from films;
然后添加一个filmid列:
alter table filmdates add column filmid integer;
(filmname, dateshown)
alter ignore table filmdates add unique(filmname, dateshown);
然后我们在films(filmname)
上添加一个唯一索引 - 因为它是真正重复的唯一值。
alter ignore table films add unique(filmname);
现在我们正在设置,我们在新表格中填充filmid
列,并使用旧版本的加工值。
update films f
inner join filmdates fd
on f.filmname = fd.filmname
set fd.filmid = f.filmid;
现在我们只需要清理并删除冗余列(films.dateshown
和filmdates.filmname
)。
alter table filmdates drop column filmname;
alter table films drop column dateshown;