我有一張桌子personnes
jouer=# create table personnes (
g_name VARCHAR ( 50 ),
f_name VARCHAR ( 50 ) UNIQUE,
company BOOLEAN NOT NULL DEFAULT false)
;
導致:
Colonne | Type | Collationnement | NULL-able | Par défaut
--------- ----------------------- ----------------- ----------- ------------
g_name | character varying(50) | | |
f_name | character varying(50) | | |
company | boolean | | not null | false
我想添加一個約束,以便:
- 如果 company 為 true,則 g_name 和 f_name 必須為 null 并且
- 如果 company 為 false,則 g_name 和 f_name 都必須不為空。
我嘗試了兩件事,但都沒有給出正確的結果。
jouer=# ALTER TABLE personnes ADD CONSTRAINT personnes_company_check CHECK (
company is false
and g_name is not null
and f_name is not null)
;
ALTER TABLE
和
jouer=# ALTER TABLE personnes ADD CONSTRAINT personnes_company_check CHECK (
company is true
and g_name is null
and f_name is null)
;
uj5u.com熱心網友回復:
有多種寫法。您的要求的字面翻譯將是一個條件運算式
ALTER TABLE personnes ADD CONSTRAINT personnes_company_check CHECK (
CASE WHEN company
THEN g_name IS NULL AND f_name IS NULL
ELSE g_name IS NOT NULL AND f_name IS NOT NULL
END
);
但我更喜歡
ALTER TABLE personnes ADD CONSTRAINT personnes_company_check CHECK (
company = (g_name IS NULL) AND
company = (f_name IS NULL)
);
您也可以將其拆分為兩個單獨的約束。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/516620.html
標籤:PostgreSQL
上一篇:Docker無法提取postgres映像:“清單串列條目中沒有windows/amd6410.0.22000的匹配清單”
