2014-01-06 4 views
0

мне нужна отборная команда выполнить следующие действия:SQL: Проверьте строки для того же записей в определенных столбцах

У меня есть таблица, как этот

ID | col1 | col2 | col3 | colN | ... 
23 | asf | slf | rrr | ... | ... 
23 | asf | slf | rrr | ... | ... 
59 | asf | 567 | rrr | ... | ... 
59 | asf | gh1 | rrr | ... | ... 
02 | la1 | slf | rrr | ... | ... 
02 | la1 | slf | rrr | ... | ... 

Есть всегда 2 строки с одинаковыми ID. Теперь я хочу выбрать эти, которые имеют одни и те же записи в некоторых других столбцах (здесь col1, col2, col3), но не обязательно в других столбцах.

В результате для примера я хочу, чтобы это

23 | asf | slf | rrr | ... | ... 
23 | asf | slf | rrr | ... | ... 
02 | la1 | slf | rrr | ... | ... 
02 | la1 | slf | rrr | ... | ... 
+0

Вам нужен ПЕРВЫЙ КЛЮЧ. Это правило реляционных данных. – Strawberry

+0

Спасибо. Но я не знаю, что это такое. Я новичок в sql. Кажется, мне нужно узнать больше основ ... – user3165675

+0

Да. Действительно, это так. – Strawberry

ответ

0

тезисов таблица действительно имеет первичный ключ, который является уникальным среди всех кортежей? В этом случае вы можете сделать простое автообъединение:

SELECT e1.* FROM entities e1 
    INNER JOIN entities e2 ON 
    e1.pkey != e2.pkey 
    AND e1.ID = e2.ID 
    AND e1.col1 = e2.col1 
    AND e1.col2 = e2.col2 
    AND e1.col3 = e2.col3; 

Другим вариантом был бы агрегирование:

SELECT * FROM entities WHERE ID IN (
    SELECT ID FROM entities GROUP BY ID, col1, col2, col3 
    HAVING count(*) > 1) 
+0

Результаты OP показывают дубликаты идентификаторов, которые необходимо учитывать. Вероятно, просто нужна группа – Ric

+0

Нет. К сожалению, нет первичного ключа или чего-то уникального. Ваши другие решения, похоже, не работают. Я попробовал. – user3165675

+0

Он должен работать, по крайней мере, я не вижу ошибки. –

0

Используйте этот запрос:

выберите * из теста, где идентификатор в

(выберите a.id из системы a

в Нер присоединиться к тест B

на (A.id, a.col1, a.col2, a.col3) = (b.id, b.col1, b.col2, b.col3)

группы по (a.id)

, имеющий счетчик (*)> (выберите количество (*) от испытательной с

где c.id = a.id))

SQLfiddle

Смежные вопросы