Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql从表中删除重复项_Mysql_Database_Myisam - Fatal编程技术网

Mysql从表中删除重复项

Mysql从表中删除重复项,mysql,database,myisam,Mysql,Database,Myisam,我有一个包含以下列的表 code (varchar) desc (varchar) attr1 (varchar) attr2 (varchar) attr3 (varchar) reference 表中包含大量数据。我需要的是,我需要从表中删除所有条目,这些条目的代码、attr1、attr2和,attr3.我尝试使用这些列添加唯一索引,但没有成功。我可以为这些列使用一些脚本吗?所有这些列都允许空值。我的数据库引擎是myisam。您可以使用 ALTER IGNORE TABLE your_

我有一个包含以下列的表

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);
这实际上应该是可行的,但它不会费心删除或更改较旧的数据。 它将确保未来的数据是唯一的

如果您试图添加一个重复条目,那么它将抛出一个错误


如果您在使用时仍然无法获得解决方案,分享您收到的错误消息。

desc
在mysql中是一个保留字。不要将它用作列名。这会导致错误。我尝试过使用它。但没有成功。是因为我的表中有空值的数据吗。?您尝试过alter ignore table吗?是的,我尝试过。因为我看到了您发布的相同答案,并尝试过这样做。但是当我尝试添加索引时,它没有帮助我没有收到任何错误消息。索引已创建,但它不会从数据中删除任何重复项,但如果我尝试添加新的重复项,它会抛出错误。
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`) ;