Проверить ограничение на основе другого значения столбца

У меня есть таблица с именем Table1 с тремя столбцами col1, col2, col3. col1 может иметь одно из трех значений (1, 2 или 3).

Мне нужно добавить ограничение проверки, чтобы оно проверяло, если col1 имеет значение 1, тогда значения col2 и col3 должны быть одинаковыми, иначе, если col1 имеет значения 2 или 3, тогда значения col2 и col3 могут быть или не быть одинаковыми.

Может ли кто-нибудь сказать мне, как добавить ограничение для этого?

Заранее спасибо.


person Indhumathi    schedule 15.02.2019    source источник


Ответы (3)


Вы можете добавить контрольное ограничение следующим образом:

ALTER TABLE Table1 ADD CONSTRAINT chk_table1_cols
    CHECK ( (col1 = 1 AND col2 = col3) OR (col1 IN (2, 3)) );

Обратите внимание, что «is the same» предполагает, что значения не равны NULL. Эту логику можно добавить, если вы хотите рассматривать NULL значения как равные.

person Gordon Linoff    schedule 15.02.2019

Вы можете выразить это состояние с помощью ряда логических операторов:

(col IN (1, 2, 3)) AND (col2 = col3 OR col1 IN (2, 3)
person Mureinik    schedule 15.02.2019

Я не проверял (у меня нет MySql), но в Oracle работает следующее:

ALTER TABLE Table1 ADD
(
  CONSTRAINT CHK_1 CHECK ((col1 BETWEEN 1 AND 3) AND (col1 <> 1 OR col2=col3))
)
person Robert Kock    schedule 15.02.2019
comment
Я могу сказать вам, что это не работает в MySQL, вместо этого вы можете использовать представление с опцией проверки в MySQL, которая может выполнять то же самое - person Raymond Nijland; 15.02.2019
comment
@RaymondNijland, возможно, вы правы (я плохо знаком с mysql), но w3schools.com/ sql / sql_check.asp говорит, что он должен работать. - person Robert Kock; 15.02.2019
comment
Подождите ... MySQL 8.0.16 (еще не выпущен, общедоступен) швы будет поддерживать его , наконец, .. В общих случаях я бы не советовал использовать w3schools для документации SQL. - person Raymond Nijland; 15.02.2019