【发布时间】:2018-08-10 21:46:35
【问题描述】:
基于一个整数 ID,如何限制引用一个公共表的两个表包含另一个表中已经存在的相同元素?
创建个人信息的基本表:
CREATE TABLE person (
id INTEGER PRIMARY KEY AUTOINCREMENT,
info VARCHAR(10)
);
然后创建两个引用person 的表:
CREATE TABLE special (
id INTEGER PRIMARY KEY,
skill VARCHAR(10),
FOREIGN KEY (id) REFERENCES person(id)
);
CREATE TABLE snowflake (
id INTEGER PRIMARY KEY,
meltingpoint DECIMAL,
FOREIGN KEY (id) REFERENCES person(id)
);
但是,我想限制这两个表包含同一个人。
所以我认为这样可以解决问题,但 SQLite3 会出现语法错误(靠近 CHECK)。
ALTER TABLE special ADD CHECK (
(SELECT COUNT(*) FROM snowflake WHERE snowflake.id = special.id) = 0
);
或基于this answer
ALTER TABLE special ADD CHECK (
NOT EXISTS (SELECT 1 FROM snowflake WHERE snowflake.ID = special.ID)
);
如何实现?我是在做某事还是应该采取完全不同的方法?
【问题讨论】:
标签: sql sqlite constraints