2015-02-14 2 views
0

Как я могу создать ограничение, чтобы избежать дубликатов среди 2 колонки на той же строке, например:Избегайте дубликаты на ряд под 2 колонки SQL

+----+-------+-------+ 
| Id | Code1 | Code2 | 
+----+-------+-------+ 
| 1 | x  | x  | 
+----+-------+-------+ 

где каждый однорядные, Code1 не может равняться Кодекса2.

+0

Я думаю, вам нужно будет написать триггер. – OldProgrammer

+2

Iirc, 'ALTER TABLE имя_таблицы ADD CONSTRAINT имя_информации CHECK (code1 <> code2)' делает трюк. Вы можете использовать нулевые значения в code1, code2, например. по умолчанию значение по крайней мере одного из столбцов никогда не будет содержать: 'nvl (code1, 42) <> nvl (code2, 42)'. – collapsar

+0

Вы ищете [уникальное ограничение] (http://www.techonthenet.com/oracle/unique.php)? – JodyT

ответ

1

Добавить проверочное ограничение в таблицу сравнения столбцов:

ALTER TABLE MyTable 
ADD CONSTRAINT CHK_UniqueCodeOnRow 
CHECK(Code1 <> Code2) 

SQL Fiddle


Update

Per комментарий @ Коллапсар в выше, если столбцы обнуляемым вы также можете захотеть удовлетворить это (т. е. если вы не будете ant Code1 и Code2, чтобы содержать нулевые значения, хотя вы довольны тем или иным).

ALTER TABLE MyTable 
ADD CONSTRAINT CHK_UniqueCodeOnRow 
CHECK(Code1 <> Code2 AND NOT (Code1 IS NULL AND Code2 IS NULL)) 

SQL Fiddle

-1

Вы определяете уникальный ключ для других столбцов?

Если вы не хотите, чтобы вставка выполнялась i-e, если CODE1 = CODE2 не должен выполняться, определите уникальный ключ для соответствующих столбцов.

Хотя, вы можете найти другие темы, выполняющие тот же запрос.

Надеюсь, это поможет.

+0

Как это поможет? Уникальность относится к значениям столбцов в разных строках таблицы. Это не исключает идентичности в какой-либо записи (даже в каждой записи, fwiw) – collapsar

+0

Хорошо, тогда хорошая идея состояла бы в том, чтобы придерживаться мысли о том, что нельзя повторять одну и ту же комбинацию, такую ​​как X Y, Y X, X X, Y Y –

Смежные вопросы