Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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_Sql_Database - Fatal编程技术网

删除MySQL数据库中的重复项

删除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

我试图从一个MySQL表中删除两个列值相同的重复项

在本例中,我希望有一个id列(称为nid)和一个具有相同值的哈希列:

| 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`)