2016-04-06 3 views
1

に参加する方法がわからない:SQL - 私はこのような2つのテーブルを結合するためにしようとしているテーブル

表A

ID Value1 
1  A 
2  B 
3  C 

表B

ID Value2 
1  A 
3  B 
4  C 

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

ID Value1 Value2 
1  A  A 
2  B  null 
3  C  B 
4  null C 

e IDの表Aと表Bを結合する。 IDは、表Aに存在しない場合は、表B.

からIDを追加し、私が来ている最も近いです:私にTableBのから新しい行を与えるが、IDがnullである

SELECT 
    a.ID, a.Value1, b.Value2 
FROM 
    TableA a 
OUTER JOIN 
    TableB b ON a.ID = b.ID 

どうすればこの問題を解決できますか?

+0

LEFT JOINは道のりです。 – jarlh

+0

左の結合は、期待される結果を得るためには機能しません。 – nhouser9

+0

LEFT JOINは最後の行を追加せず、Value2列を追加するだけです。 OUTER JOINは、Value2列と最後の行を追加しますが、その行のIDは追加しません。 – schneiju

答えて

5

あなただけの右方向に少しプッシュを必要とする、非常に接近している:

SELECT COALESCE(a.ID, B.ID) As ID, a.Value1, b.Value2 
FROM TableA a 
FULL OUTER JOIN TableB b ON a.ID=b.ID 

COALESCE機能は、それはそれがnullではない取得する最初のパラメータを返します。これは完全外部結合であるため、a.idは1つの行でNULLになり、b.idは異なる行ではnullになります。

+0

'FULL OUTER JOIN'はすべてのDBMSで利用可能ではありません。 – sagi

+0

これはまさに私が必要としていたものでした!迅速な返信をありがとう。 – schneiju

+0

@sagi外部結合と完全外部結合は基本的に同じですが、最後は読みやすくなります。 OPが外部結合を使用している場合、完全外部結合も使用できるはずです。私は '外部結合 'をサポートするデータベースを認識しますが、'完全外部結合'は認識しません。 –

0

これを試してみてください:

SELECT * 
FROM TableA A 
FULL OUTER JOIN TableB B 
ON A.ID = B.ID; 

だけ注意を:あなたがそれらにスペースをSQLであなたのテーブルに名前を付けるべきではありません。

+0

は、id、id、value1、value2の4つの列を返します。 –

+0

'FULL OUTER JOIN'はすべてのDBMSで利用可能ではありません。 – sagi

0

は異なる表をあなたのケースでは

SELECT column_name(s) 
FROM table1 
FULL OUTER JOIN table2 
ON table1.column_name=table2.column_name; 

に参加するための基本的なを覚えておいてください:

SELECT a.value1, b.value2 
FROM TableA a 
FULL OUTER JOIN TableB b ON a.ID=b.ID 

は完全外部を覚え

に参加FULL OUTER JOINキーワードは、テーブル(にtableA)からすべての行を返し、テーブル(tableB)から取得し、FULL OUTER JOINキーワードは、LEFTとRIGHTの両方の結合の結果を結合します。

関連する問題