2016-09-04 5 views
1

の独立した一意の行、私は現在の問題のPostgreSQL - オーダー

メンバーとの難しさのビットを抱えている他の部材との一致を持っている - それは一度だけ表示されます。私は見つけようとしている、

は今、リクエストがMEMBERID 2から入ってきた私たちはメンバーと呼ばれるテーブルを持つスキームと

Member 
------------- 
| id | name | 
------------- 
| 1 | bob | 
| 2 | tim | 



     Match 
------------------------ 
| memberid | requestid |(memberid is a foreign key to member same as requestid) 
------------------------- 
| 1  |  2  | 

しかし、別のテーブルと呼ばれるマッチを持っていると言うと、それはそれを拒否すべきですそのタイプの制約またはインデックスの名前。一意であるかマッチしていますが、どの列でもかまいません。

ので、これは

 Match 
------------------------ 
| memberid | requestid |(memberid is a foreign key to member same as requestid) 
------------------------- 
| 1  |  2  | 
| 2  |  1  | 

私の唯一の考えはmemberid <> requestid制約を追加している無効にする必要があります。しかし、もっと良い方法があると思った。

答えて

1

ペアに1つの行しか持たない場合は、一意制約を使うことができます。キーは、式にユニークなインデックスを作成することです。

create unique index unq_matches_memberid_requestid 
    on matches(least(memberid, requestid), greatest(memberid, requestid)); 
+0

ニート!私は、 'alter table add unique CONSTRAINT'構文を使いこなそうとしましたが、動作させることができませんでした。今日何かを学んだ、ありがとう! – Mureinik

+0

ああ!それは動作します私は完全に理解していない理由は、少なくとも(memberid、requestid)と最大(memberid、requestid)突然それはユニークな行/列になります(テストは完璧に働いた私はちょうどルールの仕事) – Andrei

+0

オハイオ州私は両方の値を取得することができますので、最小値は1つの値を取得し、最高の私たちは、 – Andrei

関連する問題