Sql 我对Postgres中的这个查询有问题

Sql 我对Postgres中的这个查询有问题,sql,postgresql,Sql,Postgresql,我在Postgres中对该表有问题,它给了我以下错误: 错误:无法在检查约束中使用子查询 第66行:选中Artista inSelect ID\u Artista 我想检查DirigeF表中的Artista是否具有来自另一个表的tipologia='REGISTA'。正如错误所示,您不能使用检查约束来执行此操作。一个选项是触发器。另一个是外键约束,但这需要仔细安排 首先,您需要一个列来指示Artista中的类型是REGISTA还是AR。这将是: alter table artista add i

我在Postgres中对该表有问题,它给了我以下错误:

错误:无法在检查约束中使用子查询 第66行:选中Artista inSelect ID\u Artista


我想检查DirigeF表中的Artista是否具有来自另一个表的tipologia='REGISTA'。

正如错误所示,您不能使用检查约束来执行此操作。一个选项是触发器。另一个是外键约束,但这需要仔细安排

首先,您需要一个列来指示Artista中的类型是REGISTA还是AR。这将是:

alter table artista add is_regista_ar bool generated always as 
    (tipologia in ('REGISTA', 'AR'));
然后创建唯一的约束或索引:

alter table artista add unq_artista_tipologia_id
    unique (is_regista_ar, id_artista)
注:这需要博士后12+的成绩。但在早期版本中也可以做类似的事情

然后,向表中添加一个始终为真的布尔列:


不能在检查约束中查看当前行以外的内容。
alter table artista add unq_artista_tipologia_id
    unique (is_regista_ar, id_artista)
create table DirigeF (
    Artista int references Artista(ID_Artista) on delete cascade,
    Film int references Film(ID_Contenuto) on delete cascade,
    is_regista_ar bool generated always as true,
    constraint fk_artista_tipo_artista foreign key (is_regista_ar, Artista) references Artista(is_regista_ar, ID_Artista),
    constraint DirigeF_PK primary key (Artista, Film)
);