有一个名为联系人的表,其中包含列id,名称,地址,ph_no等.
我需要查找具有相同名称的行,如果行数大于1,则显示这些行.
我需要查找具有相同名称的行,如果行数大于1,则显示这些行.
例如:
表:联系人
id--------name--------address---------ph_no-------- 111 apple U.K 99******* 112 banana U.S 99******* 123 grape INDIA 99******* 143 orange S.AFRICA 99******* 152 grape KENYA 99*******
对于上面的表,我需要获得具有相同列名数据的行,如下所示:
id--------name--------address---------ph_no-------- 123 grape INDIA 99******* 152 grape KENYA 99*******
select * from contacts where name='grape' and it's count(*) >1 return those rows.
如何实现上述问题的解决方案.
正如@ vc74所暗示的那样,分析函数在这里工作得更好;特别是如果您的数据有任何数量.
select id,name,address,ph_no ... from ( select c.*,count(name) over ( partition by name ) as name_ct from contacts c ) where name_ct > 1 ;
编辑
限制特定名称表联系人应该在名称上有一个索引,查询将如下所示:
select id,count(name) over ( partition by name ) as name_ct from contacts c where name = 'grape' ) where name_ct > 1 ;