我有一个TAB_1表,有230行。
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行,第1行为TAB_2,第2行为TAB_1,第2行为TAB_2,依此类推)。该查询也将有230行。
我该怎么做?
我尝试了这些查询但是在TAB_2中的每一行TAB_1中的每一行都会得到结果:
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 :(得分:7)
您需要一个密钥才能加入。您可以使用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
将返回所有行,无论它们是否具有相同的行数。
答案 1 :(得分:1)
你不想加入"没有"因为你最终会得到一个笛卡尔联合 - 这将给你超过230行的方式。相反,您想要加入行号。 Here's someone that did it for you already.
答案 2 :(得分:1)
创建两个新查询并加入它们:
这些新查询将有一个新列:row_number()
从TAB_1
中选择*,Row_NUMBER()为rowTab1从Tab_2
选择*,Row_Number()为rowTab2现在创建一个包含前两个视图的第三个查询,并在rowTab1 = rowTab2
上加入答案 3 :(得分:1)
如果你可以在两个表上添加和添加额外的列,例如“joinparameter”,并从1到230加入,那么两者都可以起作用。
这样的事情:
选择a.audit_id,b.employee_id,b.first_name,b.last_name 来自TAB_1,a.joinparameter = b.joinparameter
上的内连接TAB_2 b
或者,如果audit_id和employee_id从1到230都可以加入