2013-09-09 4 views
2

я имел таблицу с почти 20000 записей
с колоннами
Как найти повторяющиеся записи в таблице SQL

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 

помочь мне, как я мог бы сделать это

+0

Какую версию SQL вы используете? – egrunin

+0

Я использую сервер MSSQl 2008r2 –

+0

Ответы ниже будут работать с вашей версией MSSQL. – egrunin

ответ

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 
     ) 
+0

+1 для скрипки - таким образом, он может видеть, работает ли он с его версией SQL – egrunin

+0

, спасибо, что это работает –

+0

Я предпочитаю вместо этого (Group By and Have) использовать (AND a.UniqueId! = B.UniqueId) – danisius

0

Подсчитайте свои идентификаторы, если больше, то 1, то затем выберите его

SELECT * 
FROM table 
HAVING COUNT(id) > 1 
+0

Неправильно, оба ID и SubjectID должны совпадать. – egrunin

1

Вы можете использовать аналитическую COUNT(), так как вы используете SQL Сервер 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 

Выход для обоих запросов:

 
| ID | SUBJECTID | UNIQUEID | 
|----|-----------|----------| 
| 2 |  60 |  8 | 
| 2 |  60 |  9 | 
| 7 |  54 |  15 | 
| 7 |  54 |  18 | 
| 7 |  54 |  30 | 

Вот SQLFiddle демо

1

Попробуйте

выборки только дублируют г ecord

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 
Смежные вопросы