2017-03-28 8 views
0

私は2つのテーブルを持っています。sqlは結合の説明を残しました

私はテーブルBの一致がある場合を除き、表Aからすべてのレコードを必要とし、その後、Bのマッチング値テーブルAにはテーブルBとの試合を持っているので、場合

をテーブルを取り、その後、私はからその値を除外する必要があります結果(つまり、表Aのすべてのレコードを取り出し、表Aのレコードを表Bの一致する値に置き換えます)。

私の理解から私は一致する列に2つのテーブルを結合し、null値を除外するwhere句を追加しましたが、正しいかどうかはわかりません。

データ:

tableA (col1 =ID, col2 =value) 
1, 5 
2, 3 
3, 7 

tableB (col1 =ID, col2 =value) 
4, 6 
2, 9 

expected result: 

5 

9 

7 

これは私が得ている最も近いですが、私はそれが正しいかどうかわからないが:

select * from tableA tblA 
left join tableB tblB 
on tblA.matchingColumn = tblB.matchingColumn 
where tblB.matchingColumn is null 
+0

TableBの中で試合に応じて、またはbの値をTABLEBして使用するようにTABLEAから左結合を実行します。 –

答えて

1

これはTABLEA内のすべての行を返します。 TABLEBに一致する値がある場合は、VALUEとして使用されます。

SELECT TBLA.ID 
    , COALESCE(TBLB.VALUE, TBLA.VALUE) VALUE 
FROM TABLEA TBLA 
    LEFT JOIN TABLEB TBLB 
     ON TBLA.ID = TBLB.ID; 

UPDATEからSQLFiddleこのスレッドの

+0

私はあなたの質問を試みました。私は私のデータを少し間違って提示したかもしれないと信じています。私はテーブルと予想される結果を更新しました。もう一度見てください。 – HelpMeWithXSLT

+0

@HelpMeWithXSLこちらをご覧くださいhttp://sqlfiddle.com/#!9/7bc86/4 – Pons

1

あなたのクエリが正しく見える

select tablea.id, case when tableb.id is null then tablea.value else tableb.value end value 
from tablea 
left join tableb on tablea.id=tableb.id 
関連する問題