入手:
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是從能夠做這種方式移開。
最後,你需要擺脫你的日期欄。
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
,從舊MACHING值。
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;
demo here
在這些行filmid複製呢? –
對不起,只是有機會回到你身邊......沒有FilmID沒有重複(除了FilmID和Date字段,我的一切都是一樣的) – HowardHosk