Вернуть логическое значение, если дубликаты существуют - PullRequest
0 голосов
/ 07 ноября 2018

Как мне вернуть True , если в таблице есть дубликаты записей, и False , если в ней нет ни одной.

Мне не нужен счетчик, мне не нужно знать, какие строки, все, что я хочу знать, - есть ли в этой таблице дубликаты или нет.Вот и все.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

вы можете попробовать

SELECT COUNT(*) > 1
FROM T
GROUP BY C1,C2...
0 голосов
/ 07 ноября 2018

Если вы не хотите перечислять столбцы, вот один из методов:

select (count(*) <> num_distinct) as has_duplicates
from t cross join
     (select count(*) as num_distinct
      from (select distinct * from t) t
     ) tt;

Если у вас есть первичный ключ, то более эффективным методом будет:

select (count(*) <> count(distinct pk)) as has_duplicates
from t;

Относительно эффективный метод с первичным ключом будет:

select (count(*) = 1) as has_duplicates
from (select t.*
      from t
      where exists (select 1 from t t2 where t2.pk = t.pk and t2.? <> t.?)
      fetch first 1 row only
     ) t;

? - это столбец / столбцы, которые вас интересуют с точки зрения дубликатов.

...