12

null 可能なCHAR列が 2つあり、そのうちの 1 つだけが null かどうかを確認する必要があります。

やっている

(a IS NULL AND b IS NOT NULL) OR (a IS NOT NULL AND b IS NULL)

退屈です。そのためのカスタム関数を作成することは避けたいと思います。

みたいなことを考えていた

COALESCE(a, 1) + COALESCE(b, 1) = 1

aしかし、そうである限り、charオペランドタイプエラーが発生します。

それで、トリッキーな解決策はありますか?

4

2 に答える 2

26

正確に1つがNULL(既存のロジックと一致する)であることを意味する場合は、次のようになります。

a is null != b is null
于 2012-04-18T03:24:33.687 に答える
8

また、PostgreSQL を使用している場合は、括弧を忘れないでください...

ALTER TABLE "schema"."table" ADD CHECK ((key1 IS NULL) <> (key2 IS NULL));

(CHECK の何が問題なのかを理解するのに 10 分近く費やしました。)

于 2014-07-16T11:15:26.653 に答える