2014-06-06 71 views
-1

我有兩個完全相同的表,除了一列。兩個表都有相同數量的記錄和相同數量的列,並且所有數據都是相同的。如何更新每個記錄的PK

Table A: 
+--------------------------------------+--------+--------+---------+ 
|     GUID     | Animal | Person | Vehicle | 
+--------------------------------------+--------+--------+---------+ 
| 1D001609-7071-4DBB-9E65-0000B3EEF751 | cat | matt | car  | 
| 90260783-E3C3-4A9B-BEA0-000388EA41E1 | dog | rich | truck | 
| DD18FCFA-99BD-4FBC-AFC2-00058EF95D0A | zebra | alex | van  | 
+--------------------------------------+--------+--------+---------+ 



Table B: 
+--------------------------------------+--------+--------+---------+ 
|     GUID     | Animal | Person | Vehicle | 
+--------------------------------------+--------+--------+---------+ 
| F67A3079-8589-4304-AA3C-000688696BAA | cat | matt | car  | 
| C71710EC-492F-424E-805D-00068AFE4E82 | dog | rich | truck | 
| 5F830142-F4CC-4580-974D-000710F1AB5F | zebra | alex | van  | 
+--------------------------------------+--------+--------+---------+ 

我需要一個表的GUID來進行更新,以等於表B的東西的GUID像這樣將工作:

update a 
set a.guid=b.guid 
from tablea a 
join tableb b 
on a.animal=b.animal 
and a.person=b.person 
and a.vehicle=b.vehicle 

但上述方案不會爲我工作。我實際上有大約50列和大約100萬條記錄。

關於如何更有效地更新表A中的GUID,您還有其他建議嗎?

+0

爲什麼不回藍的表,而你不希望列? –

+0

太慢了。我想也許我可以把每一行的散列減去第一列,並比較記錄的方式 –

+0

@MikeCheel再生表將改變GUID –

回答

3
UPDATE A 
SET [GUID] = (
    SELECT [GUID] 
    FROM B 
    WHERE EXISTS (
    SELECT A.Animal,A.Person,A.Vehicle 
    INTERSECT 
    SELECT B.Animal,B.Person,B.Vehicle 
) 
) 
1

如果你想表是相同的,這個怎麼樣:

DROP TABLE B 

SELECT * 
INTO B 
FROM A 
+1

這不會保留B上的主鍵和其他約束。對於TRUNCATE TABLE B來說更好。然後重新插入行。這將保留表格定義。 – Vulcronos