Несколько уникальных ограничений на разные столбцы в одной таблице - PullRequest
0 голосов
/ 15 февраля 2019

В моей базе данных Oracle 11g есть важная таблица.Он имеет index column, который установлен как primary key.Есть второй столбец, который содержит строки, которые должны быть уникальными.Я добавил unique constraint для этого.Теперь есть третий столбец, который также должен иметь уникальное ограничение.

Когда я использую оператор ALTER TABLE, я получаю сообщение об ошибке

'ORA-02299: обнаружены повторяющиеся ключи'ошибка.

Я знаю, что возможно создать уникальное ограничение для нескольких столбцов, но это НЕ то, что я хочу.Мне нужно, чтобы столбцы были независимо уникальными:

    ALTER TABLE someTable
    ADD CONSTRAINT constraint1_someTable UNIQUE (column2);
    ALTER TABLE someTable
    ADD CONSTRAINT constraint2_someTable UNIQUE (column3);

Я ожидаю, что все записи во всех столбцах этой таблицы будут полностью уникальными.Есть ли элегантный способ добиться этого?

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

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

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

select column3 from someTable group by column3 having count(*) > 1;

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

ALTER TABLE someTable
 ADD CONSTRAINT constraint2_someTable UNIQUE (column3) 
   USING INDEX(CREATE INDEX column3_ix ON someTable (column3)) ENABLE NOVALIDATE;
0 голосов
/ 15 февраля 2019

решение Щурика должно работать.Другое решение - самостоятельное соединение.

select t1.column1, t1.column3, t2.column3
from someTable t1, someTable t2
where t1.column1 = t2.column1
and t1.column3 = t2.column3
and t1.rowid <> t2.rowid
0 голосов
/ 15 февраля 2019

Кажется, что ваш столбец содержит несколько повторяющихся ключей, поэтому вы получаете сообщение об ошибке при попытке применить уникальный индекс.
Убедитесь, что у вас нет повторяющихся значений, перед установкой Уникального ограничения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...