2016-08-16 5 views
0

は、私は2つのテーブルに存在する5つのフィールドに結合されたテーブルがあると満足場所/参加の数をオフに基づいてすべてのマッチ、任意の4マッチ、任意の3マッチ、任意の2マッチ、1マッチ、マッチなし。分割または特定のレコードは、条件が

もともと、私はちょうどので、私は、すべての5試合の記録と0の一致レコードを(私が参加し、左使用し、フィールドのいずれかにヌルかどうかを確認するでしょうになるだろうとの結合条件ですべての5をputingを考えていました右の表に)。 Nullのリストから、同じ左結合と結合を使用して各条件を調べることができます。それらはすべて、nullまたはnullの数で値をフィルタリングして一致を判定します。

私はこれを行うには良い方法があると確信しています。助言がありますか?

おかげで、

SELECT *, cast(count1 as int)+cast(count2 as int)+cast(count3 as int)+cast(count4 as int)+cast(count5 as int) 
FROM(
SELECT t1.*, t2.*, 
    t1.firstname = t2.firstname as count1, 
    t1.lastname = t2.lastname as count2, 
    t1.address = t2.address as count3, 
    t1.city = t2.city as count4, 
    c1.country = t2.country as count5 
FROM Table1 AS t1 
CROSS JOIN Table2 AS t2) t3 
+0

どのように行うかを判断するためのサンプルデータがありますか?しかし、私はどのように私はそれが見えると想像すればCTEのを含む解決策を見ることができるかもしれないと思う – Merenix

答えて

1

2つのテーブル間の完全なクロス積を作成するCROSS JOINを使用してください。次に、レコードの各ペアの間で一致する列の数を加算します。

SELECT t1.*, t2.*, 
    (t1.firstname = t2.firstname) + (t1.lastname = t2.lastname) + (t1.address = t2.address) + (t1.city = t2.city) + (c1.country = t2.country) AS num_fields_matching 
FROM Table1 AS t1 
CROSS JOIN Table2 AS t2 
+0

素晴らしい!ありがとう。 – scrayon

+0

ちょっとBarmar、私のnum_fields_matchingがカウントを表す数字ではなくブール値(真、偽、ヌル)として来る理由はありますか? – scrayon

+0

'+'は '='よりも優先度が高いため、括弧が必要です。 – Barmar

関連する問題