Sqlite 条件约束唯一
我有下一张桌子Sqlite 条件约束唯一,sqlite,constraints,unique,Sqlite,Constraints,Unique,我有下一张桌子 create table use_flags3 ( id INTEGER, flag_name VARCHAR NOT NULL, flag_description VARCHAR NOT NULL, flag_type_id INTEGER NOT NULL, package_id INTEGER, FOREIGN KEY (flag_type_id) REFERENCES use_flags_types(id),
create table use_flags3 (
id INTEGER,
flag_name VARCHAR NOT NULL,
flag_description VARCHAR NOT NULL,
flag_type_id INTEGER NOT NULL,
package_id INTEGER,
FOREIGN KEY (flag_type_id) REFERENCES use_flags_types(id),
FOREIGN KEY (package_id) REFERENCES packages(id),
PRIMARY KEY (id)
);
当flag\u type\u id等于1时,我需要flag\u name
列唯一。我试图通过下一个约束来实现这一点
CONSTRAINT idx1_chk CHECK (
flag_type_id in (select id from use_flags_types where flag_type="local") or
flag_type_id in (select id from use_flags_types where flag_type="expand") or
flag_type_id in (select id from use_flags_types where flag_type="expand_hidden") or
(
flag_type_id in (select id from use_flags_types where flag_type="global") and
flag_name not in (select flag_name from use_flags)
)
)
flag_name not in (select flag_name from use_flags)
sqlite说“检查约束中禁止子查询”。我可以代替
flag_type_id in (select id from use_flags_types where flag_type="local")
与
但我不能对约束最后一部分的第二个子部分使用相同的技巧
CONSTRAINT idx1_chk CHECK (
flag_type_id in (select id from use_flags_types where flag_type="local") or
flag_type_id in (select id from use_flags_types where flag_type="expand") or
flag_type_id in (select id from use_flags_types where flag_type="expand_hidden") or
(
flag_type_id in (select id from use_flags_types where flag_type="global") and
flag_name not in (select flag_name from use_flags)
)
)
flag_name not in (select flag_name from use_flags)
是否有机会在一个表中执行我最初想要的操作(我真的不想将这些数据拆分为2(+)个表)
//希望说明非常清楚如果您有一个复杂的约束,您应该使用触发器: 现在我只允许flag_name字段是非唯一的。在插入所有数据之后,我只需运行一个简单的检查(在我的情况下,这样做是可以接受的;至少现在,这只是一个原型)。无论如何,谢谢你的回复