2016-09-18 19 views
0

をSQL: データセット1:は、2つのテーブルをマージこれは私のデータセットである

col2 col3 col4 
1  2 3 
1  5 6 

データセット2:

name2 name3 name4 
a  b  c 
d  e  l 

私はこのようにこれらの二つのテーブルをマージしたい:

col2 col3 col4 name2 name3 name4 
1 2  3 a  b  c 
1 5  6 d  e  l 

私は試しました:

select * from table1 join table2 on true; 

が、私を与える:正しくない

col2 col3 col4 name2 name3 name4 
1  2 3  a b  c 
1  2 3  d e  l 

を。どのように私はこれを達成することができる?

答えて

2

あなたの結果は4つのレコードになっているはずです。

参加するには共通のキーが必要ですが、参加するには共通のキーが必要です。 1つの方法があります。

select t1.col2, t1.col3, t1.col4, t2.name2, t2.name3, t2.name4 
from (select t1.*, row_number() over() as seqnum 
     from table1 t1 
    ) t1 join 
    (select t2.*, row_number() over() as seqnum 
     from table2 t2 
    ) t2 
    on t1.seqnum = t2.seqnum; 

行の順序(一致を定義する)は不確定であることに注意してください。これが重要な場合は、適切な順序でrow_number()order by句を含めます。

0

は、私の知る限り見るように、これは動作するはずです:

SELECT * FROM table1 JOIN table2 ON table1.row_number()=table2.row_number(); 
+2

。あなたは 'over()'なしでウィンドウ関数を使うことはできませんし、そのような結合条件で使うことはできません。 –

0

あなただけTABLE1から両方tables.select *、table2の中から選択することができ、このcase.Youに参加する必要がいけません。

+0

いいえ、私はすでに成功していないので、上記のエラーが出てきます。 – xCloudx8

0

あなたがしたい場合(両方のテーブルの列の数が同じであればあるため)、あなたはこのようなすべての列を取得することができ、この場合にJOINを必要としない:これは仕事に行くのではありません

SELECT col2,col3,col4 FROM dataset1 
UNION 
SELECT name2,name3,name4 FROM dataset2 
+0

2つの異なるタイプ(整数と文字列)であるため、 – xCloudx8

関連する問題