我有一个包含标记信息的mysql数据库,一些标记对relation_id
和tag_id
是重复的。忽略其他字段,是否可以选择(并最终删除)这些字段对是多余的行?
例如,我有这个表:
并且第二行是重复的,因为它与前一个条目具有相同的relation_id
和tag_id
值。第三排很好。第五行是副本,第七行是第八行,等等。
选择这些重复项的mySQL语法是什么?
答案 0 :(得分:1)
为了防止mysql多次存储一个组合, 你可以像以下一样使用UNIQUE:
ALTER TABLE omeka_taggins ADD UNIQUE(relation_id, tag_id)
应该阻止向表中添加重复项
如果你在重复时尝试这样做,
你收到警告,
但你可以忽略这个警告:
ALTER IGNORE TABLE omeka_taggins ADD UNIQUE(relation_id, tag_id)
请在使用ignore关键字之前备份表格, 因为它忽略了很多好的警告
答案 1 :(得分:0)
如果我没有弄错,应该删除所有符合给定条件的行。
DELETE FROM tags
WHERE `tag_id`= 'some_value' AND `relation_id`= 'some_value';
答案 2 :(得分:0)
您可以使用group by
和having
修饰符来查找重复项。类似的东西:
select tag_id, relation_id, count(*) from omeka_taggings group by tag_id,relation_id having count(*)>1