簡體   English   中英

我在 Postgres 中的這個查詢有問題

[英]I have a problem with this query in Postgres

我在 Postgres 中的這個表有問題,它給了我這個錯誤:

錯誤:無法在檢查約束 LINE 66 中使用子查詢:檢查(Artista in(選擇 ID_Artista

create table DirigeF(
    Artista int references Artista(ID_Artista) on delete cascade,
    Film int references Film(ID_Contenuto) on delete cascade,
    check(Artista in(Select ID_Artista
                    from Artista
                    where tipologia='REGISTA'or'AR')),
    constraint DirigeF_PK primary key(Artista, Film)
);

我想檢查 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)

注意:這需要 Postgres 12+。 但是在早期版本中可以做類似的事情。

然后,將 boolean 列添加到您的表中,該列始終為true

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)
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM