2

我有一张包含近 20000 条记录的
表格

Id      SubjectId      UniqueId
1        54            1
1        58            2
1        59            3
1        60            4
2        54            5
2        58            6
2        59            7
2        60            8
2        60            9
3        54            10
3        70            11

我想选择那些

结果一样重复的记录

Id      SubjectId      UniqueId
 2        60            8
 2        60            9
 7        54            15
 7        54            18
 7        54            30

帮帮我,我怎么能这样做

4

4 回答 4

8

利用EXISTS()

SELECT  a.*
FROM    tableName a
WHERE   EXISTS
        (
            SELECT  1
            FROM    tableName b
            WHERE   a.ID = b.ID AND
                    a.SubjectID = b.subjectID
            GROUP   BY Id, SubjectId
            HAVING  COUNT(*) > 1
        )
于 2013-09-09T06:07:48.063 回答
1

您可以使用分析COUNT(),因为您使用的是SQL Server 2008

SELECT id, subjectid, uniqueid
  FROM   
(
  SELECT  id, subjectid, uniqueid,
          COUNT(*) OVER (PARTITION BY id, subjectid) cnt
    FROM  table1
) q
 WHERE cnt > 1

或其他方式

SELECT t.*
  FROM   
(
  SELECT  id, subjectid
    FROM  table1
   GROUP  BY id, SubjectId
  HAVING  COUNT(*) > 1
) q JOIN table1 t
    ON q.id = t.id
   AND q.subjectid = t.subjectid

两个查询的输出:

| 身份证 | 主题 | 唯一的 |
|----|------------|----------|
| 2 | 60 | 8 |
| 2 | 60 | 9 |
| 7 | 54 | 15 |
| 7 | 54 | 18 |
| 7 | 54 | 30 |

这是SQLFiddle演示

于 2013-09-09T06:14:22.300 回答
1

尝试这个

仅获取重复记录

SELECT * FROM TABLE_NAME as t1 where SubjectId  in (SELECT SubjectId   FROM TABLE_NAME as t2 where t2.Id=t1.Id and t1.UniqueId<>t2.UniqueId) order by Id,SubjectId   
于 2013-09-09T06:36:28.307 回答
0

计算您的 ID,如果大于 1,则选择它

SELECT  *
FROM    table
HAVING  COUNT(id) > 1
于 2013-09-09T06:12:19.123 回答