检查另一列 (2) 中的值的列 (1) 的约束等于 'String1' 和 'String2',将列 (1) 设置为非空

Constraint for a column(1) that checks the values in another column(2) are equal to 'String1' and 'String2', setting column(1) to not null

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

    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 之外的另一个值,将执行检查子句。

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