SQL, чтобы узнать, почему у PK Canidate есть дубликаты на некированной таблице

StackOverflow https://stackoverflow.com/questions/4444781

  •  10-10-2019
  •  | 
  •  

Вопрос

Если мой титул болит тебе голову ... Я с тобой. Я не хочу понимать, почему эта таблица существует, за исключением того, что она является частью устаревшей системы, а также система делает «доступ к уровню рекордса» (RLA), и это я знаю, что это будет проблемой для многих таблиц, в любом случае RLA упомянуто, потому что добавление столбца изменит формат таблицы, и тогда многие очень старые программы больше не будут работать ...

Очевидно, добавление PK было показано, чтобы не менять формат таблицы. Поэтому мне сказали, что определенный набор ключей гарантируется, что он уникален, ну, что вы знаете ... это не так. И теперь мне нужно показать, где это не так.

Все, о чем я могу думать, это:

Получите кросс -продукт, где таблица соответствует его основному ключу.

Каким -то образом получите столбец подсчета на набор результатов для количества записей, где PK соответствует себе.

Отфильтруйте этот результат для значений, где идентификатор счета больше 2.

Я посмотрю, достаточно ли я расширию PK, я действительно найду что -то уникальное.

Это было полезно?

Решение

Удалите ограничения / уникальные индексы, вставьте данные, а затем запустите этот запрос:

SELECT col1, col2, ..., coln, COUNT(*)
FROM your_table
GROUP BY col1, col2, ..., coln
HAVING COUNT(*) > 1

куда col1, col2, ..., coln это список столбцов в вашем ключе (один или несколько столбцов). Результатом будет список ключей, которые встречаются более одного раза вместе с подсчетом, показывающим, как часто они встречаются.

Другие советы

select col1, ... from tab group by col1, ... having count(*)>1;
SELECT * FROM (SELECT ID, COUNT(*) CNT FROM MY_TABLE GROUP BY ID) WHERE CNT > 1
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top