加入没有加入条件的表

dud*_*er4 2 sql t-sql

这看起来很简单,但我无法弄清楚.我想简单地将两张桌子连在一起.我不关心哪些值与哪个值配对.使用TSQL,这是一个例子:

declare @tbl1 table(id int)  
declare @tbl2 table(id int)  

insert @tbl1 values(1)  
insert @tbl1 values(2)  
insert @tbl2 values(3)  
insert @tbl2 values(4)  
insert @tbl2 values(5)  

select * from @tbl1, @tbl2  
Run Code Online (Sandbox Code Playgroud)

这会返回6行,但是会产生什么样的查询(只是并排打击表):
1 3
2 4
null 5

Kir*_*oll 7

您可以为每个表行编号,然后加入行号:

WITH
Table1WithRowNumber as (
    select row_number() over (order by id) as RowNumber, id from Table1
),

Table2WithRowNumber as (
    select row_number() over (order by id) as RowNumber, id from Table2
)

SELECT Table1WithRowNumber.Id, Table2WithRowNumber.Id as Id2
FROM Table1WithRowNumber 
FULL OUTER JOIN Table2WithRowNumber ON Table1WithRowNumber.RowNumber = Table2WithRowNumber.RowNumber
Run Code Online (Sandbox Code Playgroud)

编辑:Modiifed使用FULL OUTER JOIN,因此您获得所有行(带空值).


Cha*_*ana 5

使用交叉连接

  Select * From tableA Cross Join TableB
Run Code Online (Sandbox Code Playgroud)

但是要理解,对于TableA中的每一行,TableB中的每一行都会在输出中输入一行...

因此,如果一个表有8行,表B有4行,你会得到32行数据...如果你想比任何减少,你必须指定一些连接标准,将从输出过滤掉多余的行