我正在尝试使用另外两个表中的键更新连接表。 联接表 (TableC( 已填充了来自表 A 的数百万个键。 如下所示的查询在不到两分钟的时间内更新所有行(非常可以接受(;但是,如果存在相似的行,则每行都应唯一匹配。 (表 B 中的键不应在 TableC 中重复 - 表 A 中的每个记录都应与表 B 中的唯一记录匹配。
UPDATE TableC
SET TableC.TableBkey = b.TableBkey
FROM TableC AS c
INNER JOIN TableA AS a ON a.TableAkey = c.TableAkey
INNER JOIN TableB AS b ON b.col1 = a.col1 AND b.col2 = a.col2 AND b.col3 = a.col3
WHERE c.TableBkey IS NULL
这会使查询无限期运行而不更新任何记录;联接可能无法完成。
AND NOT EXISTS (SELECT TOP 1 TableBkey FROM TableC AS x WHERE x.TableBkey = b.TableBkey)
是否有任何其他方法可以在不降低性能的情况下限制 TableB 中的重复键? 我宁愿不使用触发器。
试试这个:
UPDATE TableC
SET TableC.TableBkey = b.TableBkey
FROM TableC AS c
INNER JOIN TableA AS a ON a.TableAkey = c.TableAkey
INNER JOIN (select * from TableB
LEFT JOIN TableC ON TableB.tableBkey = TableC.tableBkey
WHERE TableC.TableBkey is null )
AS b ON b.col1 = a.col1 AND b.col2 = a.col2 AND b.col3 = a.col3
WHERE c.TableBkey IS NULL