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

SQLServer连接两个表

  •  0
  • CoolStraw  · 技术社区  · 14 年前

    我有个问题要问你,我很难把两个表组合起来,我找不到正确的查询。

    T1:1列,有X条记录 T2:1列,有Y记录 注:Y不能大于X,但通常小于这个

    我想加入这些表以便有一个包含两列的表 t3:从T1列,从T2列。

    谢谢

    2 回复  |  直到 14 年前
        1
  •  2
  •   Andomar    14 年前

    可以在子查询中给每个表一个行号。然后你可以在那个行号上左键联接。要回收第二个表中的行,请使用模数 %

    例子:

    select  Sub1.col1
    ,       Sub2.col1
    from    (
            select  row_number() over (order by col1) as rn
            ,       *
            from    @T1
            ) Sub1
    left join
            (
            select  row_number() over (order by col1) as rn
            ,       *
            from    @T2
            ) Sub2
    on      (Sub1.rn - 1) % (select count(*) from @T2) + 1 = Sub2.rn
    

    declare @t1 table (col1 int)
    declare @t2 table (col1 datetime)
    
    insert @t1 values (1), (2), (3), (4), (5)
    insert @t2 values ('2010-01-01'), ('2012-02-02')
    

    1        2010-01-01
    2        2012-02-02
    3        2010-01-01
    4        2012-02-02
    5        2010-01-01
    
        2
  •  1
  •   Harrison    14 年前

    您正在寻找左联接(http://www.w3schools.com/sql/sql_JOIN_LEFT.asp)例如。T1左连接T2

    假设他们都有CustomerID列

    SELECT * 
      FROM T1
            LEFT JOIN
           T2 on t1.CustomerId = T2.CustomerId
    

    这将返回T1中的所有记录和T2中匹配的记录,对于不匹配的T2值,返回空值。

    确保将表联接到公共列(如果执行联接需要多个列,则为公共列集)。如果不是,你是在做笛卡尔连接( http://ezinearticles.com/?What-is-a-Cartesian-Join?&id=3560672 )