我正在尝试创建检查约束,以防止人们将sales_status
更改为3
,除非progression_status
是80
。
我以为是
ALTER TABLE mytable
ADD CONSTRAINT sales_status_cant_be_3_for_nonprogressed
CHECK (((sales_status = 3 ) or (progression_status < 80)))
但是,这将返回错误,指出某行违反了它。当我运行查询
select * from mytable where sales_status = 3 and progression_status < 80
我没有得到预期的结果。但是我似乎无法使检查约束起作用
答案 0 :(得分:2)
大概是因为您有违反约束的现有数据。因此,请检查现有数据是否为真:
select t.*
from mytable t
where not ( (sales_status = 3 ) or (progression_status < 80) );
请注意,这假定列不是null
。 ({check
约束和where
对null
布尔值的处理不同。)
编辑:
我认为您想要的逻辑是:
CHECK ((sales_status <> 3 ) or (progression_status >= 80));