这看起来很简单,但我无法弄清楚.我想简单地将两张桌子连在一起.我不关心哪些值与哪个值配对.使用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
您可以为每个表行编号,然后加入行号:
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,因此您获得所有行(带空值).
使用交叉连接
Select * From tableA Cross Join TableB
Run Code Online (Sandbox Code Playgroud)
但是要理解,对于TableA中的每一行,TableB中的每一行都会在输出中输入一行...
因此,如果一个表有8行,表B有4行,你会得到32行数据...如果你想比任何减少,你必须指定一些连接标准,将从输出过滤掉多余的行