2016-02-25 81 views
2

我有一个表TAB_1有230行。创建查询加入2个表1对1没有共同

CREATE TABLE TAB_1 (audit_id bigint NOT NULL PRIMARY KEY) 

我有另一个表TAB_2,它也有230行。

CREATE TABLE TAB_2 (employee_id bigint NOT NULL PRIMARY KEY, first_name varchar(50) NOT NULL, last_name varchar(50) NOT NULL) 

这两个表格没有任何共同之处。

我想写一个查询,它将给我这两个表1中的所有列1(即TAB_1的第1行与TAB_2的第1行,第2行的TAB_1与第2行的TAB_2等等)。该查询也将有230行。

我该怎么做?

我尝试了这些查询,但他们得到的结果的每一行中tab_1中次,每次行TAB_2:

select a.audit_id, b.employee_id, b.first_name, b.last_name 
from TAB_1 a inner join TAB_2 b on 1 = 1 

select a.audit_id, b.employee_id, b.first_name, b.last_name 
from TAB_1 a cross join TAB_2 b 
+0

加入ROW_NUMBER()。 –

回答

6

你需要一个密钥才能加入。你可以得到这个使用row_number()

select t1.*, t2.* 
from (select t1.*, row_number() over (order by audit_id) as seqnum 
     from tab_1 t1 
    ) t1 full outer join 
    (select t2.*, row_number() over (order by employee_id) as seqnum 
     from tab_2 t2 
    ) t2 
    on t1.seqnum = t2.seqnum; 

这假定排序是基于第一列。 full outer join将返回所有行,而不管它们是否具有相同的行数。

+0

谢谢。它工作完美。 – srh

1

创建两个新的查询,并加入他们的行列:

这些新的查询将有一个新的列:ROW_NUMBER()

选择*,ROW_NUMBER()作为rowTab1从tab_1中

选择* ROW_NUMBER()从Tab_2

rowTab2

现在创建包含前两个视图的第三查询和加入rowTab1 = rowTab2

1

如果你可以在两个表上添加额外的列,例如“joinparameter”,并且它从1到230并加入,那么这两者都可以工作。

像这样:

选择a.audit_id,b.employee_id,b.first_name,从tab_1中b.last_name 一个内连接TAB_2 B关于a.joinparameter = b.joinparameter

或者,如果audit_id和employee_id都从1到230,则可以加入它们。