我正在尝试使用来自其他两个表的键更新连接表。连接表(TableC)已经填充了TableA中的数百万个键。如下查询在不到两分钟的时间内更新所有行(非常可接受);但是,在存在类似行的情况下,每行应唯一匹配。 (TableB中的键不应在TableC中重复 - TableA中的每个记录都应与TableB中的唯一记录匹配。)
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中的重复键而不会破坏性能?我宁愿不使用触发器。
答案 0 :(得分:0)
试试这个:
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