2014-01-10 6 views
0

У меня есть таблица с 4 столбцами, я бы хотел, чтобы строки для столбцов 1, 2 и 3 имели одинаковые данные.Выберите повторяющиеся строки в нескольких столбцах таблицы

TableName 
Col1 Col2 Col3 Col4 
abc 12 xyz  1 
abc 12 xyz  2 
abc 12 xyz  3 
abc 12 xyz  4 
def 34 wxy  5 
ghi 45 uvw  6 
ghi 45 uvw  7 
ijk 45 tuv  8 

Я ожидаю, чтобы выбрать строки 1 до 4 и 6,7

Спасибо.

+0

[Здесь sqlfiddle] (http://sqlfiddle.com/#!4/37c04) вы можете использовать. – eebbesen

ответ

2

Если вы пытаетесь получить только списки таких значений:

select col1, col2, col3 
from tablename 
group by col1, col2, col3 
having count(*) > 1; 

Если вы хотите фактические строки, а затем присоединиться к этому еще в:

select tn.* 
from tablename tn join 
    (select col1, col2, col3 
     from tablename 
     group by col1, col2, col3 
     having count(*) > 1 
    ) tncol 
    on tn.col1 = tncol.col1 and tn.col2 = tncol.col2 and tn.col3 = tncol.col3; 
2

Один из возможных способов делать это следующим образом.

select distinct t1.* 
from TableName t1 
left join TableName t2 
on t1.Col4 <> t2.Col4 and t1.Col1 = t2.Col1 and t1.Col2 = t2.Col2 and t1.Col3 = t2.Col3 
where 
t2.Col4 is not null 

Это не очень оптимально (если в таблице много рядов и много дубликатов).

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