次のテーブルがあります
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_type_id が 1 に等しい場合にのみflag_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)
)
)
sqlite は、「CHECK 制約ではサブクエリは禁止されています」と言っています。交換できます
flag_type_id in (select id from use_flags_types where flag_type="local")
と
flag_type_id = ${ID_HERE} -- id from `select id from use_flags_types where flag_type="local"`
しかし、制約の最後の部分の2番目のサブパートに対して同じトリックを行うことはできません
flag_name not in (select flag_name from use_flags)
1 つのテーブル内で最初にやりたいことを実行する機会はありますか (これらのデータを 2(+) テーブルに分割したくありません)。
// 説明が明確であることを願っています