gpt4 book ai didi

mysql - 合并具有不同值的重复行

转载 作者:行者123 更新时间:2023-11-29 12:15:22 25 4
gpt4 key购买 nike

这是对 this question 的更正现在我正确地理解了我需要做什么。

我在 MySQL 中有一个表格,其中包含电影及其放映日期以及其他列中的其他信息。

所以相关列是...

FilmID

FilmName

DateShown

日期存储为 Unix 时间戳。

我目前有多个在不同日期放映的电影实例,但所有其他信息都是相同的。

我需要将重复电影的日期复制到一个新表中,将它们与电影 ID 相匹配。然后我需要从原始表中删除重复的胶片行。

因此,我创建了一个新表 Film_Dates,其中包含列

FilmDateID
FilmID
Date

任何人都可以帮助使用实际的 SQL 来执行此操作。

谢谢。

最佳答案

首先:

insert into filmdateid (filmid, `date`)
select filmid, dateshown
from films

这应该会填充您的新表。

alter ignore table films
add unique (filmid)

这将强制 filmid 的唯一性,并删除所有重复项,仅保留一行。如果此操作因“重复条目”错误而失败,您将需要运行此命令,然后再次尝试更改。

设置 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;

以及(影片名称,所示日期)上的唯一索引

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.dateshownfilmdates.filmname)。

alter table filmdates drop column filmname;
alter table films drop column dateshown;

demo here

关于mysql - 合并具有不同值的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29899177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com