Sqlite

Sqlite 使用其他表中的檢查列創建表

  • January 4, 2017

我有兩張桌子:

位置

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;

引用自:https://dba.stackexchange.com/questions/159945