这看起来很简单,但我无法弄清楚。我想简单地将两张桌子连在一起。我不关心哪些值与哪个值配对。使用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
这会返回6行,但是会产生什么样的查询(只是将表并排拍打):
1 3
2 4
null 5
答案 0 :(得分: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
编辑:已修改为使用FULL OUTER JOIN,因此您获取所有行(包含空值)。
答案 1 :(得分:5)
使用交叉连接
Select * From tableA Cross Join TableB
但是要明白,对于TableA中的每一行组合,TableB中的每一行都会在输出中输入一行...
因此,如果表A有8行,而TableB有4行,那么你将获得32行数据...... 如果你想要少于那个,你必须指定一些连接标准,这将从输出中过滤掉额外的行
答案 2 :(得分:2)
嗯,这样可行:
Select A.ID, B.ID From
(SELECT ROW_NUMBER () OVER (ORDER BY ID) AS RowNumber, ID FROM Tbl2 ) A
full outer join
(SELECT ROW_NUMBER () OVER (ORDER BY ID) AS RowNumber, ID FROM Tbl1 ) B
on (A.RowNumber=B.RowNumber)
答案 3 :(得分:0)
SQL1交叉连接也适用于此处。
Select *
From tableA, TableB