我有一个“电影”表,我需要添加一个限制因素,“史蒂文斯皮尔伯格”电影必须在1990年之前和“詹姆斯卡梅隆”电影必须在1990年之后。
我是Oracle SQL新手。我尝试了一些查询,但它们没有用。像
这样的东西alter table movie_16bce1346 add constraint chk_spk
if director='Steven Spielberg' then check (year>1990);
写这个约束的正确方法是什么?
答案 0 :(得分:1)
约束应该是这样的:
( director not in ('Steven Spielberg', 'James Cameron') or
director is null /* if that is allowed */ or
director = 'Steven Spielberg' and movie_year < 1990 or
director = 'James Cameron' and movie_year > 1990 )
如果您不相信开发人员对AND和OR的优先级非常熟悉和熟悉,则可以在第3行和第4行的AND分隔条件周围使用括号。
答案 1 :(得分:0)
您可以在CHECK约束中use a CASE statement:
ALTER TABLE movie_16bce1346
ADD CONSTRAINT check_year CHECK
(CASE
WHEN director = 'Steven Spielberg' AND movie_year > 1990 THEN 1
WHEN director = 'James Cameron' AND movie_year < 1990 THEN 1
WHEN director NOT IN ('Steven Spielberg', 'James Cameron') THEN 1
ELSE 0 END = 1);
CASE捕获您的条件,需要返回1或0.&#34; END = 1&#34;说CASE的结果需要等于1。