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