当前位置:  开发笔记 > 编程语言 > 正文

如何在2列而不是1列中查找重复项

如何解决《如何在2列而不是1列中查找重复项》经验,为你挑选了3个好方法。

我有一个MySQL数据库表,有两列让我感兴趣.单独地,它们每个都可以有重复,但它们应该永远不会有两个具有相同值的副本.

stone_id只要每个upsharge标题不同,反之亦然.但比如说stone_id= 412和upcharge_title="蓝宝石"这种组合应该只出现一次.

还行吧:

stone_id = 412 upcharge_title = "sapphire"
stone_id = 412 upcharge_title = "ruby"

这不行:

stone_id = 412 upcharge_title = "sapphire"
stone_id = 412 upcharge_title = "sapphire"

是否有查询会在两个字段中找到重复项?如果可能的话,有没有办法将我的数据库设置为不允许这样做?

我使用的是MySQL 4.1.22版



1> Miyagi Coder..:

您应该在两个字段之间设置复合键.这将需要每行的唯一stone_id和upcharge_title.

至于找到现有的重复项,请尝试以下方法:

select   stone_id,
         upcharge_title,
         count(*)
from     your_table
group by stone_id,
         upcharge_title
having   count(*) > 1



2> SeanDowney..:

我发现使用"ALTER IGNORE"添加unqiue索引很有帮助,它可以删除重复项并强制执行您想要的独特记录.所以语法是:

ALTER IGNORE TABLE `table` ADD UNIQUE INDEX(`id`, `another_id`, `one_more_id`);

这有效地添加了唯一约束,这意味着您永远不会有重复记录,IGNORE会删除现有的重复项.

你可以在这里阅读更多关于eh ALTER IGNORE的信息:http://mediakey.dk/~cc/mysql-remove-duplicate-entries/

更新:@Inquisitive通知我,MySql> 5.5的版本可能会失败:

它在MySQL> 5.5和InnoDB表以及Percona中失败,因为它们具有InnoDB快速索引创建功能[ http://bugs.mysql.com/bug.php?id=40344].在这种情况下,首先运行set session old_alter_table=1,然后上面的命令将正常工作



3> Jason Punyon..:

你可以找到这样的重复..

Select
    stone_id, upcharge_title, count(*)
from 
    particulartable
group by 
    stone_id, upcharge_title
having 
    count(*) > 1

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有