0

我有一个 mysql 数据库,其中包含标记信息和一些标记对,relation_id并且tag_id是重复的。忽略其他字段,是否可以选择(并最终删除)这些字段对是冗余的行?

例如,我有这张表: phpMyAdmin 截图

第二行是重复的,因为它与前一个条目具有相同的relation_idtag_id。第三排没问题。第五行是重复的,第七行、第八行等等。

选择这些重复项的 mySQL 语法是什么?

4

3 回答 3

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关键字之前备份表格,因为它忽略了很多好的警告

于 2013-05-31T21:27:36.630 回答
0

如果我没记错的话,删除所有符合给定条件的行应该是一个简单的删除。

 DELETE FROM tags
 WHERE `tag_id`= 'some_value' AND `relation_id`= 'some_value';
于 2013-05-31T19:45:14.910 回答
0

您可以使用group byandhaving修饰符来查找重复项。与此类似的东西:

select tag_id, relation_id, count(*) from omeka_taggings group by tag_id,relation_id having count(*)>1
于 2013-05-31T20:04:38.303 回答