2016-11-30 7 views
0

を挿入するとき、私はこのようなテーブルを持っている列のペアを確認します。はpostgres:新しい行

id | person | supporter | referredby| 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 
0 | ABC | DEF  |   | 
1 | ABC | GHI  | DEF  | 
2 | CBA | FED  |   | 
3 | CBA | IHG  | FED  | 

私はINSERTを拒否するように、私はpostgresのを希望されて達成しようとしている場合referredby ISNの値特定の人物の場合はsupporterの列には入力しないでください。拒否(IHGはABCのための支持体として記載されていない) :受け付け

  • 4, 'ABC', 'JKL', 'IHG'(nullにすることができる):

    • 4, 'ABC', 'JKL', null:上記のデータを用いて、例えば

      (ヌルreferredbyはOKです)

    • 4, 'ABC', 'JKL', 'DEF':受け入れました(DEFはABCのサポーターとして記載されています)

    多分チェック制約ですか?私はそれを一緒に纏める方法がわからない

  • +0

    外部キーを多分? – jarlh

    +0

    それは2つの列をチェックするために働くでしょうか?私はそれが1つだけに限定されていると思った –

    +0

    (人、サポーター)に一意の制約が必要です、そして、fkを追加してください。 – jarlh

    答えて

    0

    人、サポーターを参照する外部キーを追加します。 (一意のキーである必要があります。)

    alter table t add constraint cname unique(person, supporter); 
    
    alter table t add constraint fk foreign key (person, referredby) 
        references t (person, supporter); 
    

    (ANSI SQL構文、おそらくもPostgreSQLでサポート。)

    関連する問題