【问题标题】:How to find duplicate field combo如何查找重复的字段组合
【发布时间】:2009-04-14 17:14:47
【问题描述】:

我有一个包含 id、a 和 b 列的表。

a+b 应该是唯一的,但这是一个未正确约束的遗留数据库。如何获取 a+b 不唯一的记录的一组 id?

如果我有

ID A B
1  2 3
2  2 3
3  1 3
4  1 4

然后我想从查询中取回记录 1 和 2。

【问题讨论】:

标签: sql-server sql-server-2005 tsql


【解决方案1】:
select
    id, a, b

from your_table t

join (select a, b from your_table group by a, b having count(1) > 1) dup on dup.a = t.a and dup.b = t.b

【讨论】:

  • 该死的,你打败了我。甚至到方法(JOIN)和措辞。但我的不滚动。哈! ;-) +1 更快。
【解决方案2】:

要取回 1 和 2(如您所说),请使用:

SELECT
  *
FROM
  your_table
  INNER JOIN (
    SELECT a, b FROM your_table GROUP BY a, b HAVING COUNT(*) > 1
  ) dupes ON 
    your_table.a = dupes.a AND
    your_table.b = dupes.b

【讨论】:

  • lol 但是你的从一开始就不是这样的。没有人能证明这一点,但我知道。 ;-)
【解决方案3】:

使用窗口函数稍微快一点:

select *
from (
     select
        a
     ,  b
     ,  cnt = count(*) over ( partition by a, b )
     from your_table
) x
where cnt > 1; /* Dupe */

【讨论】:

    猜你喜欢
    • 2016-02-16
    • 2023-03-16
    • 2017-08-31
    • 2023-04-04
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    相关资源
    最近更新 更多