我有一个包含以下列的表格
code (varchar)
desc (varchar)
attr1 (varchar)
attr2 (varchar)
attr3 (varchar)
reference
并且该表包含批量数据。我需要的是从表中删除所有具有重复值的代码、attr1、attr2、attr3 的条目。我尝试使用这些列添加唯一索引,但没有奏效。我可以为这些使用一些脚本。所有这些列都允许空值。我的数据库引擎是 myisam。
您可以添加唯一索引并删除重复项
ALTER IGNORE TABLE your_table
ADD UNIQUE INDEX dup_idx (code, attr1, attr2, attr3);
DELETE a
FROM your_table a
LEFT JOIN
(
SELECT MIN(id) AS id, code, attr1, attr2, attr3
FROM your_table
GROUP BY code, attr1, attr2, attr3
) b
ON a.id = b.id
AND a.code = b.code
AND a.attr1 = b.attr1
AND a.attr2 = b.attr2
AND a.attr3 = b.attr3
WHERE b.id IS NULL
ALTER IGNORE TABLE your_table
ADD UNIQUE INDEX `UniqueData` (`code`, `attr1` , `attr2` ,`attr3`) ;
这实际上应该有效,但是它不会打扰删除或更改旧数据。它将确保未来的数据是唯一的。
如果您尝试添加重复条目,则会引发错误。
如果您在使用它时仍然无法获得解决方案,请分享您收到的错误消息。