Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 条件约束唯一_Sqlite_Constraints_Unique - Fatal编程技术网

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字段是非唯一的。在插入所有数据之后,我只需运行一个简单的检查(在我的情况下,这样做是可以接受的;至少现在,这只是一个原型)。无论如何,谢谢你的回复