我的桌子看上去如下:
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复制,但我想删除所有复制了itemid、name和meta的记录,留下一条记录(不再重复)。我是MySQL。我寻找解决办法,但没有找到适合我需要的东西。
发布于 2011-04-23 11:42:41
由于数据很小,创建具有类似结构的表并执行这样的查询可能更简单:
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)忽略是标准SQL的MySQL扩展。它控制ALTER的工作方式,如果新表中的唯一键上有重复项,或者启用严格模式时会出现警告。如果未指定忽略,则在发生重复键错误时,该副本将被中止并回滚.如果指定了“忽略”,则只有第一行用于唯一键上有重复项的行,则删除其他相互冲突的行。不正确的值被截断到最接近匹配的可接受值。
发布于 2011-04-23 11:43:22
不确定这是否是你想要的,但你可以试着按条款分组。
SELECT index, itemid, name, meta FROM table GROUP BY namehttps://stackoverflow.com/questions/5763942
复制相似问题