2017-04-05 109 views
0

我使用交叉連接來連接兩個不相關的表,這將允許使用結果更新第三個表。交叉連接從表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 
+0

您可以檢查此QA與您問題相關http://stackoverflow.com/questions/12932045/cross-join-without-duplicate-combinations – Charlesliam

+0

「1,2」與「2,1」相同嗎? –

+0

@Charlesliam這些工作都可能是因爲t1.Id和t2.Id是guid列。 –

回答

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 | 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值中重複。 –