首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写SQL查询来检测重复的主键?

问如何编写SQL查询来检测重复的主键?
EN

Stack Overflow用户
提问于 2011-05-09 05:23:10
回答 4查看 17.9K关注 0票数 6

假设我想要更改表,使我的主键如下所示

user_id、round、tournament_id

目前有重复的内容需要清理。查找所有重复项的查询是什么?

这是针对MySQL的,我希望看到重复的行

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-09 05:28:42

从技术上讲,您不需要这样的查询;任何称职的RDBMS都不允许插入会在表中产生重复主键的行。这样的事情违反了主键的定义。

但是,如果您希望在将主键应用于包含这些列的表之前,编写一个查询来查找这些列组的重复项,那么这就是您想要的:

代码语言:javascript
复制
select
    t.user_id, t.round, t.tournament_id
from
    table as t
group by
    t.user_id, t.round, t.tournament_id
having
    count(*) > 1

上面的代码只会给出组合中包含多行的列的组合,如果您想要查看行中的所有列,则可以执行以下操作:

代码语言:javascript
复制
select
    o.*
from
    table as o
        inner join (
            select
                t.user_id, t.round, t.tournament_id
            from
                table as t
            group by
                t.user_id, t.round, t.tournament_id
            having
                count(*) > 1
        ) as t on
            t.user_id = o.user_id and
            t.round = o.round and
            t.tournament_id = o.tournament_id

请注意,如果需要多次使用结果,还可以创建一个temporary table并在其上进行联接。

票数 9
EN

Stack Overflow用户

发布于 2011-05-09 05:29:45

代码语言:javascript
复制
SELECT name, COUNT(*) AS counter
FROM customers
GROUP BY name
HAVING COUNT (*) > 1

这就是你要找的。

在table中

代码语言:javascript
复制
ID    NAME          email
--    ----          -----
 1    John Doe      john@teratrax.com
 2    Mark Smith    marks@teratrax.com
 3    John Doe      jdoe@company.com

将会返回

代码语言:javascript
复制
name         counter
----         -------
John Doe           2
票数 2
EN

Stack Overflow用户

发布于 2011-05-09 05:30:00

假设您有一个包含这三列的表,或者您可以使用这三列创建并填充一个表,则此查询将显示重复项。

代码语言:javascript
复制
select user_id, round, tournament_id
from yourtable
group by user_id, round, tournament_id
having count(*) > 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5930475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档