sql >> データベース >  >> RDS >> PostgreSQL

列のセットに対するNOTNULL制約

    @Igorは非常に正しく、いくつかのOR 'ed式は高速でシンプルです。

    列の長いリストの場合(abcdefg 例では)、これは短く、同じくらい高速です:

    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のチェック中 式は任意ので機能します 列。



    1. SQLServerでALLを使用する3つの方法

    2. 使用後にDbCommandを破棄する必要がありますか?

    3. SQLでVARCHARではなくCHARを選択するためのユースケースは何ですか?

    4. すべてのユーザーテーブルにクラスター化インデックスが必要ですか?