Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何编写此约束?_Sql_Postgresql_Check Constraints_Generic Constraints - Fatal编程技术网

Sql 如何编写此约束?

Sql 如何编写此约束?,sql,postgresql,check-constraints,generic-constraints,Sql,Postgresql,Check Constraints,Generic Constraints,任务是为常规约束编写alter查询。具体来说:在Employee中,如果EmployeeLevel为空,则EmployeeSalary也必须为空。如果有人能解释一个正确的解决方案,我们将不胜感激 ALTER TABLE Employee ADD CONSTRAINT CHECK ( EmployeeLevel IS NULL AND EmployeeSalary IS NULL ); 这里有一种方法: CHECK (EMPLOYELEVEL IS NOT NULL OR EmployeeSa

任务是为常规约束编写alter查询。具体来说:在Employee中,如果EmployeeLevel为空,则EmployeeSalary也必须为空。如果有人能解释一个正确的解决方案,我们将不胜感激

ALTER TABLE Employee
ADD CONSTRAINT 
CHECK (
EmployeeLevel IS NULL
AND EmployeeSalary IS NULL
);
这里有一种方法:

CHECK (EMPLOYELEVEL IS NOT NULL OR EmployeeSalary IS NULL)
您可能会发现逻辑并不清晰:

CHECK (NOT (EMPLOYELEVEL IS NULL AND EmployeeSalary IS NOT NULL))

该语句如果employeeLevel不为null,则可以接受employeeSalary可以为null。反之亦然。也就是说,如果employeeSalary不为null,那么employeeLevel可以为null,但这与最初的问题陈述相矛盾。如果employeeLevel为null,那么employeeSalary也必须为null。结果是一个直接的或条件,并且是意图的最清晰表达:

check ((EmployeeLevel is null and EmployeeSalary is null) or (EmployeeLevel is not null))

反之亦然吗?如果EmployeeLevel不为空,EmployeeSalary也必须不为空吗?射程呢?如果它是varchar,是允许负工资还是空EmployeeLevel。我相信如果EmployeeLevel不为null,那么employeeSalary可以为null。反之亦然。