Sqlite
Sqlite 使用其他表中的檢查列創建表
我有兩張桌子:
位置
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), );
min, max 連結到薪水
員工
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) );
但是檢查薪水欄不起作用。我有一個錯誤,沒有這樣的列: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;