2016-07-12 15 views
1

に1の一つの値を選択しますが、その可能な複数の一致は、テーブルに参加して、私は2つのテーブルを結合する必要がある多くの

t1    t2 
A B   A C 
1 x   1 0 
2 x   1 1 
3 x   2 0 
4 x   3 1 
5 x   4 1 
6 x   4 0 
       5 0 
       6 1 

があることを今私は左を必要とt1とt2からの参加しますオプションで、選択されたAにC 0と1がある場合、Cは0 (for A=1 and A=4)でなければなりません。

だから結果は次のようになります。

t3  
A B C 
1 x 0 
2 x 0 
3 x 1 
4 x 0 
5 x 0 
6 x 1 

これは可能ですか? ありがとうございます。

答えて

3

次の方法で参加し、グループでそれを行うことができます。

SELECT t1.a,t1.b,MIN(t2.c) 
FROM t1 
LEFT JOIN t2 
ON(t1.a = t2.a) 
GROUP BY t1.a,t1.b 

MIN()10両方がMIN()が表示されます、返される場合ので、グループごとに設定されているすべての結果のうち、最小を選びます0です。

2
SELECT t1.A, B, C 
FROM t1 
     LEFT OUTER JOIN 
     (SELECT A, C 
     FROM (
      SELECT A, C, 
        ROW_NUMBER() OVER (PARTITION BY A ORDER BY C) AS rn 
      FROM t2 
     ) 
     WHERE rn = 1 
     ) t2 
     ON (t1.A = t2.A) 

または

SELECT t1.A, B, C 
FROM t1 
     LEFT OUTER JOIN 
     (SELECT A, MIN(C) AS C 
     FROM t2 
     GROUP BY A 
     ) t2 
     ON (t1.A = t2.A) 
+1

ここではウィンドウ関数を含んでする必要はありませんが... – sagi

+0

@sagiそれは事実ですが、私は 't1'からすべての列を追加することが含まれていなかった解決策を行っていましたテーブルを 'GROUP BY'節に追加します。 – MT0

+1

あなたの2番目の解決策は、私の意見では、正しいものです。 GROUP BYは分を得る正しい方法であり、早く(t2だけで)行う必要があります。 – mathguy

関連する問題