SQL Server:通过在具有重复项的列上使用连接来更新表的查询

时间:2018-01-16 06:30:25

标签: sql sql-server

此处我尝试从Table2获取值并更新为Table1。我正加入Id3

我想要的是再添加一个条件,如果Id4中存在Table2,那么它应该与Table1中的匹配,并且该行应该用于更新

如果Id4不匹配,则仍应根据Id3进行更新。

Update w 
set w.id1 = s.Id1, w.id2 = s.id2 
from Table1 w 
join Table2 s on w.id3 = s. id3 
where w.id1 is null

我已经重新定义了上面的查询以使用Id4上的条件,但它无法正常工作,因为它仍然会随机重复行。

Update w 
set w.id1 = s.Id1, w.id2 = s.id2 
from Table1 w 
join Table2 s on w.id3 = s. id3 
where w. id1 is null 
  and (w. id4 = s.id4 or (1=1)) 

有人可以在上面重新构建更好的查询吗?

2 个答案:

答案 0 :(得分:0)

不确定,因为您的输入有点不清楚,但也许您可以分两步尝试:

UPDATE Table W Set Id1 = S.Id1 FROM Table1 AS W
WHERE EXISTS ( SELECT * FROM Table2 AS S 
               WHERE S.Id4 = W.Id4 )

第二步:

UPDATE Table W Set Id1 = S.Id1 FROM Table1 AS W
WHERE EXISTS ( SELECT * FROM Table2 AS S 
               WHERE S.Id3 = W.Id3 )
  AND ISNULL (Id1, '') = ''

答案 1 :(得分:0)

排队有点不清楚。试试这个:

Update w set w.id1 = s.Id1, w.id2=s.id2 
from Table1 w join Table2 s 
on w.id3 = s.id3 or w.id4 = s.id4