Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLServer连接两个表_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

SQLServer连接两个表

SQLServer连接两个表,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我要问你们一个问题,我在尝试合并两个表时遇到了困难,我无法找到正确的查询 我有两张桌子: T1:1列,有X条记录 T2:1列,有Y个记录 注:Y永远不能大于X,但它通常小于此值 我想连接这些表,以便有一个包含两列的表 t3:ColumnFromT1,columnFromT2 当Y小于X时,T2字段值会重复,并分布在所有其他值上,但当使用T2中的所有列时,我希望得到NULL 我怎样才能做到这一点? 谢谢您正在寻找左加入(http://www.w3schools.com/sql/sql_join_l

我要问你们一个问题,我在尝试合并两个表时遇到了困难,我无法找到正确的查询

我有两张桌子: T1:1列,有X条记录 T2:1列,有Y个记录 注:Y永远不能大于X,但它通常小于此值

我想连接这些表,以便有一个包含两列的表 t3:ColumnFromT1,columnFromT2

当Y小于X时,T2字段值会重复,并分布在所有其他值上,但当使用T2中的所有列时,我希望得到NULL

我怎样才能做到这一点?
谢谢

您正在寻找左加入(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://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值不匹配时为空


确保正在联接公共列(如果执行联接需要多个列,则为公共列集)上的表。如果不是,您正在执行笛卡尔连接()

您可以在子查询中为每个表指定一个行号。然后,您可以在该行号上左键联接。要从第二个表中回收行,请取第一个表的行号的模数
%

例如:

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

可以在子查询中为每个表指定一个行号。然后,您可以在该行号上左键联接。要从第二个表中回收行,请取第一个表的行号的模数
%

例如:

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

大家好,谢谢唐宁。尽管如此,我不能这样做,因为我没有条件,我所要做的就是根据两个表的当前顺序绑定它们。我每个表只有一列,不能执行“ON”(T1有一个int,T2有一个DATETIME)您好,谢谢tanging。尽管如此,我不能这样做,因为我没有条件,我所要做的就是根据两个表的当前顺序绑定它们。我每个表只有一列,不能执行“ON”(T1有int,T2有DATETIME)