我有一张 table :
CREATE TABLE teams (
id INTEGER PRIMARY KEY,
member_count INTEGER NOT NULL
);
我还有另一张 table :
CREATE TABLE members (
id INTEGER PRIMARY KEY,
team_id INTEGER,
member_number INTEGER
FOREIGN KEY (team_id) REFERENCES teams (id)
);
我希望member_number 的值介于1 和member_count(含)之间。我知道我需要在这里使用检查约束,但我不知道如何使用另一个表的列来做到这一点。我该怎么做?
最佳答案
检查约束不能引用其他表,因此您只需使用 INSERT
和 UPDATE
两个单独的触发器即可实现您想要的效果:
CREATE TRIGGER insert_member_number BEFORE INSERT ON members
BEGIN
SELECT
CASE
WHEN NEW.member_number NOT BETWEEN 1 AND (SELECT member_count FROM teams WHERE id = NEW.team_id)
THEN RAISE (ABORT, 'Invalid member number')
END;
END;
CREATE TRIGGER update_member_number BEFORE UPDATE ON members
BEGIN
SELECT
CASE
WHEN NEW.member_number NOT BETWEEN 1 AND (SELECT member_count FROM teams WHERE id = NEW.team_id)
THEN RAISE (ABORT, 'Invalid member number')
END;
END;
此外,我认为您应该更改表成员的定义,以便列 team_id
和 member_number
的组合是 UNIQUE
:
CREATE TABLE members (
id INTEGER PRIMARY KEY,
team_id INTEGER NOT NULL,
member_number INTEGER NOT NULL,
UNIQUE(team_id, member_number),
FOREIGN KEY (team_id) REFERENCES teams (id)
);
请参阅demo .
关于sql - 根据另一个表中列的值对列使用检查约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65378259/