Как найти столбец с одинаковым (некоторым значением x) значением, повторенным более одного раза? Необходимо вернуть эти строки. - PullRequest
7 голосов
/ 30 ноября 2011

Существует таблица с именем contacts со столбцами id, name, address, ph_no и т. Д.
Мне нужно найти строки с одинаковым name, если число строк больше 1, показать эти строки.

Например:
Таблица: contacts

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*******

Для приведенной выше таблицы мне нужно получить строки с таким же столбцом name данные, как показано ниже:

id--------name--------address---------ph_no--------
123       grape       INDIA           99*******
152       grape       KENYA           99*******

Мне нужно получить строки на основе имени, которое я дал в качестве аргумента, как показано ниже example синтаксис:

select * from contacts where name='grape' and it's count(*) >1 return those rows.

Как мне решить эту проблему?

Ответы [ 3 ]

12 голосов
/ 30 ноября 2011

Поскольку @ 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
       ;

РЕДАКТИРОВАТЬ

, ограничивающий конкретные имена, таблица contacts должна действительно иметь индекс nameзапрос будет выглядеть так:

select id, name, address, ph_no ...
  from ( select c.*, count(name) over ( partition by name ) as name_ct
           from contacts c
          where name = 'grape' )
 where name_ct > 1
       ;
3 голосов
/ 30 ноября 2011
select id, name, address, ph_no
from contacts
where name in
(
  select name from contacts
  group by name
  having count(*) > 1
)

Если у вас есть доступ к аналитическим функциям Oracle, возможно, существует более простой способ

1 голос
/ 30 ноября 2011
select * 
from contacts c 
where c.name in ( select cc.name 
                  from contacts 
                  group by cc.name 
                  having count(1) > 1 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...