2017-09-04 5 views
1

私は、Employeeなどのテーブルに自分自身が参加している必要があります。名前に一致する姓と姓のいずれか3つの姓が記載されているか、生年月日またはメールアドレス、または国が一致するようにファーストネームが一致する必要があり、次に3つの列のいずれかが一致する場合、どのように私はこのSQLを行うことができますか?私は3つの属性はあなたがそれぞれの試合のために1を追加する条件文の合計とORを置き換えることができOR条件に一致するSQL

+0

あなたのアプローチは問題ありません。個々の条件のまわりに括弧を入れてください。 – Amit

+1

SQL ServerまたはOracleを使用していますか?あなたが実際に使用している製品だけにタグを付けてください。 –

答えて

2

に一致する要件を強制苦労しています

where c1.firstname=c2.firstname 
and (c1.lastname = c2.lastname or c1.dob = c2.dob or ....) 

SQLは次のようなものになるだろう一致の数を数え、合計でフィルタリングします。

where c1.firstname=c2.firstname and 
    (case when c1.lastname = c2.lastname then 1 else 0 end 
    +case when c1.dob = c2.dob then 1 else 0 end 
    +case when c1.addr1 = c2.addr1 then 1 else 0 end 
    +case when c1.addr2 = c2.addr2 then 1 else 0 end 
    +case when c1.phone = c2.phone then 1 else 0 end) >= 3 
1

まず、 n 句ではなく、where句です。

第二に、あなたはマッチを数えることができます。

select c1.*, c2.* 
from c c1 join 
    c c2 
    on c1.firstname = c2.firstname and 
     ((case when c1.lastname = c2.lastname then 1 else 0 end) + 
     (case when c1.dob = c2.dob then 1 else 0 end) + 
     (case when c1.email = c2.email then 1 else 0 end) + 
     (case when c1.phone = c2.phone then 1 else 0 end) + 
     (case when c1.city = c2.city then 1 else 0 end) + 
     (case when c1.country = c2.country then 1 else 0 end) 
     ) >= 3; 

第三に、試合に注意してください。 cityが一致する場合、おそらくcountryも一致します。同じ都市で多くの人が同じ名前を持つことができます。

+0

これは有望な良いロジックに見える私はそれにショットを与える – user2101374

関連する問題