限制检查另一列2中的值的column1等于'String1'和'String2',并将column1设置为不为null

问题描述

如何为列(1)创建约束,该约束检查另一个列(2)中的值并且等于'String1'和'String2'但不等于'String3',因此将column(1)设置为not空值 这是我到目前为止尝试过的

    Create Table ER(ERNo INTEGER,ERSta Varchar2(8 CHAR) Default 'PENDING' Not Null,AUserNo Integer,CONSTRAINT ERnopK PRIMARY KEY(ERNO),CONSTRAINT ERSta_check CHECK (ERSta IN ('PENDING','APPROVED','DENIED')),CONSTRAINT AUserNoFK FOREIGN KEY (AUserNo) REFERENCES Users(UserNo),CONSTRAINT AUserNo CHECK (WHEN (ERSta like('APPROVED')or ('DENIED')) THEN AUserNo not null);

所以我的问题是:由于AuserNo已经允许空值,当在ERSta中输入“ APPROVED”或“ DENIED”时,如何将AUserNo设置为不为空?

预先感谢您的帮助。

解决方法

check (ERSta NOT IN ('APPROVED','DENIED') or AUserNo is not null)
  1. 如果ERSta是除APPROVED / DENIED之外的另一个值,则将执行check子句。

  2. 如果ERSta被批准或拒绝,则AUserNo必须不为空。