我正在使用MS SQL 我有以下表格:
table A:
id1 data1
8234 ko
2 po
333 koo
40 woo
table B:
id2 data2
123 meow
654 frrr
table C:
id3 data3
10 a
20 b
30 c
40 d
50 e
60 f
我想得到这个:
id1 data1 id2 data2 id3 data3
8234 ko 123 meow 10 a
2 po 654 frrr 20 b
333 koo NULL NULL 30 c
40 woo NULL NULL 40 d
NULL NULL NULL NULL 50 e
NULL NULL NULL NULL 60 f
它似乎是没有任何条件的全部表格。我只想按原样获取所有表中的所有列和所有数据。
我该怎么做?
UPD:表格不相关。
如果表是相关的:当事先知道哪个表大于表时,我会使用LEFT或RIGHT JOIN。但它是未知的。
答案 0 :(得分:9)
使用row_number
创建索引以用于完整加入
select * from (
select
row_number() over (order by id1 asc) rn,
id1, data1
from ta
) t1
full join (
select
row_number() over (order by id2 asc) rn,
id2, data2
from tb
) t2 on t1.rn = t2.rn
full join (
select
row_number() over (order by id3 asc) rn,
id3, data3
from tc
) t3 on t1.rn = t3.rn
答案 1 :(得分:3)
试试这个:
with a as
(select *, row_number() over (order by id1) an from tableA),
b as
(select *, row_number() over (order by id2) bn from tableB),
c as
(select *, row_number() over (order by id3) cn from tableC)
select a.id1, a.data1, b.id2, b.data2, c.id3, c.data3
from a
full outer join b on a.an = b.bn
full outer join c on a.an = c.cn
答案 2 :(得分:-1)
我认为在没有匹配条件的情况下连接表是不可能的。否则,您必须将表B中的密钥与表A密钥之一放在一起。如果您不想放置表B键(与表A键匹配)并不重要。您仍然可以使用SQL查询加入它。
就像:
SELECT tableA.*, tableB.* FROMtableA JOIN tableB ON tableA.id1 = tableB.id1
请参阅,您可以根据需要选择字段。