@Igorは非常に正しく、いくつかのOR 'ed式は高速でシンプルです。
列の長いリストの場合(a 、b 、c 、d 、e 、f 、g 例では)、これは短く、同じくらい高速です:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db<>ここでフィドル
古いSQLフィドル。
どのように機能しますか?
上記のより詳細な形式は次のようになります:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW ここでは冗長な構文です。
ROWのテスト IS NULLを使用した式 のみ レポートTRUE すべての単一列の場合 NULLです -これはまさに私たちが除外したいものです。
この式を(a,b,c,d,e,f,g) IS NOT NULLで単純に逆にすることはできません。 、これは、すべての列がIS NOT NULLであることをテストするためです。 。代わりに、式全体をNOTで否定してください 。 Voilá。
詳細については、こちらとこちらのマニュアルをご覧ください。
フォームの表現:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
同じことを実現しますが、エレガントさは劣りますが、大きな制限があります。一致するデータ型の列でのみ機能します。 、ROWのチェック中 式は任意ので機能します 列。