нужно показать только дублирующее значение в sql - PullRequest
0 голосов
/ 12 марта 2012

у меня есть таблица как

id----name----roll-----class
 1----ram-------1-----2
 2----shyam-----2-----3   
 3----ram-------1-----3
 4----shyam-----2-----3
 5----ram-------1-----2
 6----hari------1-----5

Мне нужно найти дублирующую строку только с общим именем, списком, классом . так что ожидаемый результат для меня.

    id----name----roll-----class
     1----ram-------1-------2
     2----shyam-----2-------3           
     4----shyam-----2-------3
     5----ram-------1-------2

Я пытался получить из запроса ниже, но здесь поддерживается только одно поле. Мне нужны все три поля общего. Пожалуйста, помогите мне в этом. спасибо

SELECT * 
FROM table 
WHERE tablefield IN ( 
 SELECT tablefield
 FROM table 
 GROUP BY tablefield  
 HAVING (COUNT(tablefield ) > 1) 
) 

Ответы [ 4 ]

1 голос
/ 12 марта 2012

Вы можете использовать count () over () .

select id, name, roll, class
from (select id, name, roll, class,
             count(*) over(partition by name, roll, class) as c
      from YourTable) as T
where c > 1
order by id

http://data.stackexchange.com/stackoverflow/query/63720/duplicates

0 голосов
/ 12 марта 2012

Я бы предложил что-то вроде этого

SELECT A.* FROM
Table A LEFT OUTER JOIN Table B
ON A.Id <> B.Id AND A.Name = B.Name AND A.Roll = B.Roll AND A.Class = B.Class
WHERE B.Id IS NOT NULL
0 голосов
/ 12 марта 2012

Что-то подобное должно работать (хотя я не проверял):

select a1.* 
from table a1, a2 
where (a1.id != a2.id) 
  and (a1.name == a2.name) 
  and (a1.roll== a2.roll)   
  and (a1.class== a2.class); 

Кажется, здесь есть несколько пропросалов. Если это запрос, который вы будете использовать в своем коде, остерегайтесь стоимости запросов. Попробуйте «объяснить» со своей базой данных.

0 голосов
/ 12 марта 2012

это приведет к повторному повтору только одной записи:

select t.id, t.name, t.roll, t.class 
from table t 
inner join table t1 
on t.id<t1.id 
and t.name=t1.name 
and t.roll = t1.roll 
and t.class=t1.class

это вернет то, что вам нужно:

select distinct t.id, t.name, t.roll, t.class 
    from table t 
    inner join table t1 
    on t.name=t1.name 
    and t.roll = t1.roll 
    and t.class=t1.class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...