XOR CHECK CONSTRAINTを作成することはできますか?Postgres SQL Exclusive OR(XOR)CHECK CONSTRAINT、それは可能ですか?
私はちょうどテストと呼ばれている作られた3列あり、テストテーブルの上にそれをやってる:
- ID、BIGINT
- 、BIGINT
- B、BIGINT を
私は、このためのチェック制約を作っ:
(a IS NOT NULL AND b = NULL) OR (b IS NOT NULL AND a = NULL)
Which apparently would work in MSSQL
私はこれを行うことによってそれをテスト:
失敗する必要がありINSERT INTO public.test(
id, a, b)
VALUES (1, 1, 1);
、それはORのいずれかの側にTRUEに評価されないと見て。 しかし、それはうまく挿入しています。
私が実際に制約として保存されたPostgresの何を見てみると、私はこの取得:
(a IS NOT NULL AND b = NULL::bigint OR b IS NOT NULL AND a = NULL::bigint)
を私もこれはまだ動作するはずですので、聞いて、上の先例を取るOR。
誰にでも解決策がありますか? 3つ以上の列でも可能なものが望ましいでしょうか?私はそれらがより複雑かもしれないことを理解する。
EDIT:変更
= NULL
IS NULL
に私を与える:あなたは
=
とNULL値を比較することはできません
ERROR: cannot cast type boolean to bigint
「IS NULL」です。 – jarlh
@jarlh "エラー:型booleanをbigintにキャストできません" – Blanen
あなたは(ここではわからない)いくつかのPostgresql固有のSQLを使用しようとしているようです。 – jarlh