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