首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除第n列中也具有相同值的重复行。

问删除第n列中也具有相同值的重复行。
EN

Stack Overflow用户
提问于 2012-07-31 15:35:19
回答 2查看 642关注 0票数 1

我有一张mysql桌子。标题的结构如下:

字段中转站供应商

 /T1382-1988数据计量数据计量数据

 /T1382-1988数据计量数据计量数据

 /T1282-1988数据规范数据

 /T1282-1988数据规范数据

 /T1282-1988数据规范数据

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

如何使用mysql完成这一任务?

我做了类似的事情,但它删除了所有东西,而不仅仅是重复的值。我要至少还剩一份。

代码语言:javascript
复制
DELETE

从auto ((auto.email=‘carolzval体@yahoo.com’)和(auto.卖主=‘5552’)处发出)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-05 16:37:07

代码语言:javascript
复制
"DELETE x
 FROM $table x
 LEFT
 JOIN
 ( SELECT vendors
        , email
        , MIN(lead_id) min_lead_id
     FROM $table
    GROUP
       BY vendors
        , email
 ) y
ON y.vendors = x.vendors
AND y.email = x.email
AND y.min_lead_id = x.lead_id
WHERE x.vendors = $vendor
AND y.min_lead_id IS NULL;";

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

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

这段代码的唯一问题是它不是完全最优的。使用25,000条记录集并在虚拟专用服务器中运行,它平均在2分钟内完成任务。

干杯

票数 0
EN

Stack Overflow用户

发布于 2012-07-31 15:45:19

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

代码语言:javascript
复制
ALTER IGNORE TABLE mytbl ADD UNIQUE INDEX (field1, field2, field3, field4, vendors)

正如在手册中所解释的

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

这还将防止将来添加重复项(如果您想要这样做,可以在创建索引后进行DROP )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11743773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档