交叉连接从表1和表2中获取唯一列
问题描述:
我使用交叉连接来连接两个不相关的表,这将允许使用结果更新第三个表。交叉连接从表1和表2中获取唯一列
例如。
Table1
TableId,
Table1Date
Table2
Table2Id
select top 10 t1.Id,t2.Id 't2Id' from table1 t1
Cross join table2 t2
上面的查询工作,但符合市场预期,也有表1
的重复条目,我怎么能保证这些10的结果条目都从T2 T1和不同的价值得到了不同的价值?
而且我希望利用这个结果与不同的值
update table 3
Set table3.t2Id=t3.t2Id
(
the select statement from above
) t3
where table3.Id=t3.T1Id
与交叉采样数据结果JOIN更新另一个表。 t2Id是正确的,但t1Id重复。歉意的格式不好。我期待不同的值,以及在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 | 2最多只发生一次):
select top 10
t1.Id as t1id,
t2.Id as t2id
from table1 t1
cross join table2 t2
order by newid();
要获得不同值(如对1 | 3个或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;
+0
第一个人工作..谢谢 –
+1
您已编辑您的请求,说您也想在t1中使用不同的值。我的第一个查询不能保证这一点。当你尝试时,它可能会发生这样的情况,因为随机排序的选择了十条记录,但你仍然可能得到重复。第二个查询保证避免在t1和t2值中重复。 –
您可以检查此QA与您问题相关http://stackoverflow.com/questions/12932045/cross-join-without-duplicate-combinations – Charlesliam
“1,2”与“2,1”相同吗? –
@Charlesliam这些工作都可能是因为t1.Id和t2.Id是guid列。 –