Kub*_*icz 5 sqlite table check-constraints
我有两个表:
CREATE TABLE IF NOT EXISTS position(
id_position INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
min REAL NOT NULL CHECK (min > 0),
max REAL CHECK (max > 0),
);
Run Code Online (Sandbox Code Playgroud)
最低,最高工资链接
CREATE TABLE IF NOT EXISTS employee (
id_employee INTEGER PRIMARY KEY AUTOINCREMENT,
id_position INTEGER NOT NULL,
name TEXT NOT NULL,
last_name TEXT NOT NULL,
data_of_birth TEXT NOT NULL CHECK (DATE(data_of_birth) IS NOT NULL AND data_of_birth < DATE('now','localtime')),
salary REAL NOT NULL CHECK (salary >= position.min AND salary <= position.max),
FOREIGN KEY(id_stanowisko) REFERENCES stanowisko(id_stanowisko)
);
Run Code Online (Sandbox Code Playgroud)
但是签入工资栏不起作用。我有一个错误没有这样的列:position.min。
有什么解决办法吗?
从另一个表中查找值需要一个子查询,但文档说:
CHECK 约束的表达式可能不包含子查询。
触发器的 WHERE 子句没有这样的限制:
CREATE TRIGGER employee_salary_check
BEFORE INSERT ON employee
WHEN NEW.salary < (SELECT min FROM position WHERE id_position = NEW.id_position)
OR NEW.salary > (SELECT max FROM position WHERE id_position = NEW.id_position)
BEGIN
SELECT RAISE(FAIL, "invalid salary");
END;
Run Code Online (Sandbox Code Playgroud)