代码之家  ›  专栏  ›  技术社区  ›  dudeNumber4

没有联接条件的联接表

  •  2
  • dudeNumber4  · 技术社区  · 14 年前

    这看起来很简单,但我就是搞不懂。我只想把两个表连接在一起。我不在乎哪个值与哪个值配对。使用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行,但是什么样的查询将生成这一行(只是并排拍打表):


    空值5

    4 回复  |  直到 14 年前
        1
  •  8
  •   Kirk Woll    14 年前

    您可以为每个表指定行号,然后按行号合并:

    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
    

    编辑 :修改为使用完全外部联接,因此可以获得所有行(带空值)。

        2
  •  6
  •   Charles Bretana    9 年前

    使用交叉连接

      Select * From tableA Cross Join TableB
    

    但是要明白,对于TableA中的每一行和TableB中的每一行的每一个组合,您将在输出中得到一行。。。

    因此,如果表A有8行,表B有4行,您将得到32行数据。。。 如果想要小于这个值,就必须指定一些联接条件,以便从输出中过滤掉多余的行

        3
  •  2
  •   Mark Brittingham    14 年前

    好吧,这会有用的:

    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)
    
        4
  •  0
  •   Dave    14 年前

    SQL1交叉连接在这里也适用。

    Select * 
    From tableA, TableB