假设我有2个表
Table1
ID Path
-- ----
1 PathA
2 PathB
3 PathC
4 PathD
Table2
ID Path Table1ID
-- ---- --------
23 PathA 1
24 PathX 2
25 PathC 3
26 PathZ 4
在上面,PathX应该是PathB,而PathZ应该是PathD
如何将Table2中的所有路径值与表1中的值同步,表可能很大,因此要检查所有不匹配的值并更新它们。 干杯
使用MS SQL Server 2005
答案 0 :(得分:1)
我想这应该可以解决问题......
UPDATE Table2 SET
Path = t1.Path
FROM Table2 t2
INNER JOIN Table1 t1 ON
t1.ID = t2.Table2ID
WHERE
t1.Path != t2.Path;
编辑:抱歉,我相信我误解了您的请求。我以为你想把Table2的值放到Table1中。我把它改成了另一种方式。
答案 1 :(得分:1)
以下是我认为最简单的:
UPDATE TableB SET Path = TableA.Path
FROM TableA
WHERE TableB.Id = TableA.ID AND TableB.Path <> TableA.Path
答案 2 :(得分:0)
如果我正确理解您的问题,这将使用table1
中的值更新table2上的路径Update Table2
set path = b.path
From Table2 a
Left outer join Table1 b
on a.Table1ID = b.ID
Where ltrim(rtrim(a.Path)) <> ltrim(rtrim(b.Path))
答案 3 :(得分:0)
您的示例演示了如果不对表进行规范化,您将如何(将)获得异常。
在Table2中,要么存储Table1ID,要么不存储两者,您可以查询另一个(可能会将当前的Table2重新创建为VIEW。无论您为Table2选择哪一列,都要确保在其上有一个引用Table1的外键。
答案 4 :(得分:0)
最好的方式
UPDATE TableB SET Path = TableA.Path
FROM TableA
WHERE TableB.Id = TableA.ID AND TableB.Path <> TableA.Path