Mysql 删除第n列中值相同的重复行

Mysql 删除第n列中值相同的重复行,mysql,database,Mysql,Database,我有一张mysql表。标题的结构如下所示: 现场供应商 数据 数据 数据2 数据2 数据2 现在,我想删除共享相同供应商值的重复行。因此,相同但具有不同供应商列值的两行不应视为重复。但是,等于并共享相同供应商值的两行或多行将被视为重复行,应删除,只保留一个现有副本 如何使用mysql实现这一点 我这样做了,但它删除了所有内容,而不仅仅是重复的值。我至少还需要一份 DELETE 从汽车 其中((auto.email=)carolzvalentine@yahoo.com“)和(auto.vendo

我有一张mysql表。标题的结构如下所示:

现场供应商
数据
数据
数据2
数据2
数据2

现在,我想删除共享相同供应商值的重复行。因此,相同但具有不同供应商列值的两行不应视为重复。但是,等于并共享相同供应商值的两行或多行将被视为重复行,应删除,只保留一个现有副本

如何使用mysql实现这一点

我这样做了,但它删除了所有内容,而不仅仅是重复的值。我至少还需要一份

DELETE
从汽车
其中((auto.email=)carolzvalentine@yahoo.com“)和(auto.vendors='5552')

您可以使用
ALTER IGNORE
在表的列上添加一个
UNIQUE
索引:

ALTER IGNORE TABLE mytbl ADD UNIQUE INDEX (field1, field2, field3, field4, vendors)
如中所述:

IGNORE
是标准SQL的MySQL扩展。如果新表中的唯一键上存在重复项,或者启用严格模式时出现警告,则它控制
ALTER TABLE
的工作方式。如果未指定
IGNORE
,则复制将中止,并在出现重复密钥错误时回滚。如果指定了
IGNORE
,则只有第一行用于唯一键上具有重复项的行。其他冲突行将被删除。不正确的值将被截断为最接近的匹配可接受值


这还可以防止将来添加重复项(如果您希望允许,可以在创建索引后
删除该索引)。

您可以使用
ALTER IGNORE
在表的列上添加
唯一的
索引:

ALTER IGNORE TABLE mytbl ADD UNIQUE INDEX (field1, field2, field3, field4, vendors)
如中所述:

IGNORE
是标准SQL的MySQL扩展。如果新表中的唯一键上存在重复项,或者启用严格模式时出现警告,则它控制
ALTER TABLE
的工作方式。如果未指定
IGNORE
,则复制将中止,并在出现重复密钥错误时回滚。如果指定了
IGNORE
,则只有第一行用于唯一键上具有重复项的行。其他冲突行将被删除。不正确的值将被截断为最接近的匹配可接受值

这还将防止将来添加重复项(如果您希望允许,可以在创建索引后
删除该索引)

这就行了。只需用正确的值替换代码中的php变量即可

$vendor=供应商列的名称
$table=表的名称

这段代码唯一的问题是它不是完全最优的。它拥有25000条记录集,在虚拟专用服务器上运行,平均只需2分钟即可完成任务

干杯

这就行了。只需用正确的值替换代码中的php变量即可

$vendor=供应商列的名称
$table=表的名称

这段代码唯一的问题是它不是完全最优的。它拥有25000条记录集,在虚拟专用服务器上运行,平均只需2分钟即可完成任务



干杯

您尝试过什么吗?向我们展示您的努力……“创建表格新表格作为SELECT*从自动模式,其中字符长度(供应商)>1组按供应商”;您必须在问题中显示您的努力程度,因此,如果您在问题中以您的努力程度写下上述查询,会更好……您尝试过什么吗?显示您的努力程度……“从自动创建表格新表格,其中字符长度(供应商)>1个供应商分组”;你必须在你的问题中表现出你的努力,所以如果你在你的问题中写下以上的查询作为你的努力会更好…谢谢,但我不想防止重复发生。我只想有能力在我决定删除时清除重复项。他们是用我的标准做到这一点的方法吗?@SofianeMerah:正如我所说,创建索引,然后删除它。创建索引。那就放下它。这有什么用?我不明白这里的操作。你能给我举个例子吗?谢谢。@SofianeMerah:你读过我从MySQL手册中引用的解释
IGNORE
关键字的段落了吗?是的,我读过,我写这篇文章的时候正在读手册。我确信,如果我对这些函数了解得更多,我会自己做这件事,但我没有,所以我现在不知道发生了什么。请提供上下文、示例和操作顺序。谢谢。谢谢,但我不想防止重复发生。我只想有能力在我决定删除时清除重复项。他们是用我的标准做到这一点的方法吗?@SofianeMerah:正如我所说,创建索引,然后删除它。创建索引。那就放下它。这有什么用?我不明白这里的操作。你能给我举个例子吗?谢谢。@SofianeMerah:你读过我从MySQL手册中引用的解释
IGNORE
关键字的段落了吗?是的,我读过,我写这篇文章的时候正在读手册。我确信,如果我对这些函数了解得更多,我会自己做这件事,但我没有,所以我现在不知道发生了什么。请提供上下文、示例和操作顺序。谢谢。有人知道如何做得更快吗?有人知道如何做得更快吗?