2016-12-01 3 views
0

コード:SQL Serverのダブル左は数が異なっている参加

私は正しいカウントを取得しておりません上記のコードを使用しています
Select a.x, 
    a.y, 
    b.p, 
    c.i 
    from table1 a left join table2 b on a.z=b.z 
    left join table3 on a.z=c.z; 

  • 表1は、30件のレコードを持っています。
  • 最初に参加した後は30レコードが得られますが、2レフトの後に33レコードが得られます。

なぜ私は別のカウントを取得しているのか分かりません。私の理解によれば、2回目の左への参加の後でさえ、30カウントを得ているはずです。

誰でも私がこの違いを理解するのを助けることができますか?私はあなたのテーブルtable3でSQL Server 2012

+1

1:nマッピングがありますか? – Marvin

答えて

1

を使用しています

table1に1行あたりもっとして1行が含まれています。両方のテーブルで何度も発生した値を確認してください。

group by by max機能を使用すると、1対1の行を作成できます。

2

に複数の行があり、同じzの値があります。

あなたが行うことでそれらを見つけることができます。

select z, count(*) 
from table3 
group by z 
having count(*) >= 2 
order by count(*) desc; 

を使用すると、最大1つの試合をしたい場合は、outer applyが有用であることができます。もちろん

Select a.x, a.y, b.p, c.i 
from table1 a outer apply 
    (select top 1 b.* 
     from table2 b 
     where a.z = b.z 
    ) b outer apply 
    (select top 1 c.* 
     from table3 c 
     where a.z = c.z 
    ) c; 

top 1order byして使用する必要がありますが、私はあなたが望む行を知らない。そして、これはおそらくストップギャップです。重複がある理由を理解する必要があります。

+0

ありがとうございます。あなたは重複したQCについて正しいです。私が作業しているテーブルは1:nのマッピングを持っていないと思われますが、そうであるようです。私はデータQCがこれらのテーブルのために並んでいると思います!! – ShruS

関連する問題