删除某些字段的重复项

时间:2011-04-23 11:34:43

标签: mysql sql

我的表格如下:

Field     | Type         | Null    | Key    | Default | Extra
----------+--------------+---------+--------+---------+----------------
index     | int(11)      | NO      | PRI    | NULL    | auto_increment
itemid    | int(11)      | NO      |        | NULL    |
name      | varchar(32)  | NO      |        | NULL    |
meta      | int(11)      | NO      |        | NULL    |

表很小,我不必关心最优化。

部分记录重复itemidnamemeta但我想删除所有 name 重复的记录,留下一条记录(不再重复)。这是MySQL。我搜索了解决方案,但我发现没有什么可以满足我的需求。

2 个答案:

答案 0 :(得分:3)

由于数据很小,因此创建具有类似结构的表并执行此类查询可能更简单:

INSERT INTO new_table (index, itemid, name, meta)
SELECT index, itemid, name, meta FROM old_table GROUP BY name

之后删除old_table并重命名new_table

同样可行的解决方案(我不确定)是使用IGNORE创建一个唯一索引,例如

ALTER IGNORE TABLE tblname
ADD UNIQUE INDEX ix_name (name)
  

IGNORE是标准SQL的MySQL扩展。如果新表中的唯一键上存在重复项,或者启用了严格模式时出现警告,它将控制ALTER TABLE的工作方式。如果未指定IGNORE,则复制将中止并在发生重复键错误时回滚。如果指定了IGNORE,则只对第一行使用唯一键上具有重复项的行,将删除其他冲突行。不正确的值将被截断为最接近的匹配可接受值。

答案 1 :(得分:1)

不确定您的搜索内容是否正确,但您可以尝试使用GROUP BY子句

SELECT index, itemid, name, meta FROM table GROUP BY name