我有一个包含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行
感谢。
答案 0 :(得分: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;
答案 1 :(得分: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
虽然这不是很优化(如果你的表有很多行和很多重复项)。