创建查询以连接2个表1对1,没有任何共同点

时间:2016-02-25 21:31:11

标签: sql sql-server join

我有一个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 

4 个答案:

答案 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都可以加入