我有一张mysql桌子。标题的结构如下:
字段中转站供应商
/T1382-1988数据计量数据计量数据
/T1382-1988数据计量数据计量数据
/T1282-1988数据规范数据
/T1282-1988数据规范数据
/T1282-1988数据规范数据
现在,我希望删除共享相同供应商值的重复行。因此,两个相同但具有不同供应商列值的行不应被视为重复。但是,等于和共享相同供应商价值的两个或多个行将被视为重复的,应该删除,只留下一个现有的副本。
如何使用mysql完成这一任务?
我做了类似的事情,但它删除了所有东西,而不仅仅是重复的值。我要至少还剩一份。
DELETE从auto ((auto.email=‘carolzval体@yahoo.com’)和(auto.卖主=‘5552’)处发出)
发布于 2012-08-05 16:37:07
"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分钟内完成任务。
干杯
发布于 2012-07-31 15:45:19
可以使用UNIQUE在表的列上添加ALTER IGNORE索引
ALTER IGNORE TABLE mytbl ADD UNIQUE INDEX (field1, field2, field3, field4, vendors)正如在手册中所解释的
IGNORE是标准SQL的MySQL扩展。它控制ALTER TABLE的工作方式,如果在新表中的唯一键上有重复项,或者在启用严格模式时出现警告。如果未指定IGNORE,则在发生重复键错误时,将中止副本并回滚.如果指定了IGNORE,则只有第一行用于唯一键上具有重复项的行。其他冲突的行将被删除。不正确的值被截断到最接近匹配的可接受值。
这还将防止将来添加重复项(如果您想要这样做,可以在创建索引后进行DROP )。
https://stackoverflow.com/questions/11743773
复制相似问题