删除MySQL数据库中的重复项
我试图从一个MySQL表中删除两个列值相同的重复项 在本例中,我希望有一个id列(称为nid)和一个具有相同值的哈希列:删除MySQL数据库中的重复项,mysql,sql,database,Mysql,Sql,Database,我试图从一个MySQL表中删除两个列值相同的重复项 在本例中,我希望有一个id列(称为nid)和一个具有相同值的哈希列: | nid | hash | | 2 | 932298 | | 2 | 932298 | 我只希望它们中的一个存活下来,最好是第一个插入数据库的 我正在看这篇文章,但我的用例略有不同: 我也可以选择其他选项实现它的最简单方法,我相信: 1) create table `table_copy`(id int primary key,has
| nid | hash |
| 2 | 932298 |
| 2 | 932298 |
我只希望它们中的一个存活下来,最好是第一个插入数据库的
我正在看这篇文章,但我的用例略有不同:
我也可以选择其他选项实现它的最简单方法,我相信:
1) create table `table_copy`(id int primary key,hash varchar(255), unique(`hash`)) select distinct id,hash from `table_name`;
2) drop table `table_name`;
3) rename table `table_copy` to `table_name`;
为什么不在后面再插入一次呢?你有主键列吗?这个问题与其他问题有什么不同?我觉得我在另一个问题中解释得不好。你的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解在第行的“table_copy”(nid,hash)附近使用的正确语法,如select distinct nid,hash from node_revision1@AndrewAlexander,正在进行编辑,请立即尝试..语法不准确,但无论如何,你明白了是吗?散列不是主键吗?可以有多个nid,但我只希望每个nid有一个散列值(理论上,它应该是唯一的散列id/period/),您必须稍微解释一下这个问题,您需要唯一的对还是唯一的散列?好的,因此将有多个nid具有完全相同的值-例如,nid为2的可能有30个不同的行。散列是根据与数据库表相关的对象的属性计算的,理论上应该是唯一的-如果有两个完全相同的散列,这意味着这两个对象/行是相同的,我只希望保留其中一个(最好是插入数据库的第一个)。这更清楚吗?你能确认一下吗?可以有对(nid,哈希)=(1,1)、(1,2)、(2,1)、(2,2)?这是真的吗?理论上可以有(1,1),(1,2),(2,1),(2,2),但是哈希的计算方式是,对于具有不同nid的行,几乎不可能有相同的哈希,因此最好假设哈希只有在具有相同nid时才会相同。并且可以丢弃存在重复哈希的所有行。
ALTER IGNORE TABLE `table_name` ADD UNIQUE (`hash`)