从交叉连接中获取表1和表2中的唯一列

时间:2017-04-05 05:21:51

标签: sql sql-server sql-server-2008

我使用交叉连接加入两个不相关的表,这将允许我使用结果更新第三个表。

例如。

Table1
  TableId,
  Table1Date

Table2   
  Table2Id

select top 10 t1.Id,t2.Id 't2Id' from table1 t1
Cross join table2 t2

以上查询有效,但正如预期的那样,table1有重复的条目

如何确保这10个结果条目都具有与t1不同的值和t2的不同值?

此外,我希望使用此结果更新具有不同值的另一个表

update table 3 
Set table3.t2Id=t3.t2Id
(
   the select statement from above
) t3
where table3.Id=t3.T1Id

Cross JOIN的示例数据结果。 t2Id是对的但是重复了。抱歉格式不好。我正在寻找t1Id

中的不同值
t1Id                                    t2Id
02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1    03957DD7-B9B6-4D6A-9F04-84D810B4D50B
02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1    039EF33A-9CB1-4B0B-95DA-01B68A2494AD
02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1    03A45657-7407-4D9A-8BD1-9011759FD6D0
02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1    03A72BF8-C04C-4F48-82E0-9BF68B285356
02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1    03AF3D6F-D6A3-42CC-B37C-7DC6F306679D
02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1    03C24CD2-9C99-43AD-A80B-9F3139B25356
02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1    03C89916-33A7-487A-8A6A-22364E1A4D90
02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1    03D16609-A7ED-4846-BB39-C04C0A22A8ED
02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1    03DB344B-4CFB-4C0E-BFA1-FB55D93A3C57
02A557A9-FF4F-4B53-9E95-5C0B9D8CACA1    03DE5B67-347E-40FA-B85F-807C05DA2E90

1 个答案:

答案 0 :(得分:2)

获得不同的对(例如,对1 | 2最多只出现一次):

select top 10 
  t1.Id as t1id,
  t2.Id as t2id
from table1 t1
cross join table2 t2
order by newid();

获得不同的值(例如,1 | 2或3 | 2不能出现对1 | 2):

select 
  t1.Id as t1id,
  t2.Id as t2id
from (select top 10 *, row_number() over (order by newid() as rn from table1) t1
join (select top 10 *, row_number() over (order by newid() as rn from table2) t2
  on t1.rn = t2.rn;