我的表格如下:
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 |
表很小,我不必关心最优化。
部分记录重复itemid
,name
和meta
但我想删除所有 name
重复的记录,留下一条记录(不再重复)。这是MySQL。我搜索了解决方案,但我发现没有什么可以满足我的需求。
答案 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