SQL完全连接没有任何条件

时间:2014-07-16 08:35:16

标签: sql sql-server tsql

我正在使用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。但它是未知的。

3 个答案:

答案 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

SQL Fiddle

答案 2 :(得分:-1)

我认为在没有匹配条件的情况下连接表是不可能的。否则,您必须将表B中的密钥与表A密钥之一放在一起。如果您不想放置表B键(与表A键匹配)并不重要。您仍然可以使用SQL查询加入它。

就像:

SELECT tableA.*, tableB.* FROMtableA JOIN tableB ON tableA.id1 = tableB.id1

请参阅,您可以根据需要选择字段。