SQL更新语句正在更新

时间:2014-01-06 22:20:34

标签: sql sql-update multiple-tables

我对表面看起来很容易的更新声明感到困惑。我需要使用Table2中的值更新Table1中4列中的值,基于匹配每个表中的两个单独列。这是一般语法:

Update Table1 
set field1 = [table2 field1]
, field2 = [table2 field2]
, field3 = [table2 field3]
, field4 = [table2 field4]
--select *
from Table2 p inner join Table1 c
on p.matchfield1 = c.matchfield1 and p.matchfield2 = c.matchfield2
where c.database_id = 1 --qualifier since join clause may not provide unique result set 
and p.matchfield1 = 123456 --to test the statement on a single record first

当我将该子句作为select语句运行时,我按预期获得了一条记录。但是,当我使用相同的'from'语言运行update子句时,我发现查询使用Table2中的值更新Table1中的每一行,其中matchfield1 = 123456。

我想知道我是否需要根据matchfield2值(我的例子中的eamil地址)进一步澄清我的where子句以符合条件,所以我将添加到语句的末尾'和p.matchfield2 ='email @ address.com ''。

我怀疑这是一个非常小的调整,而不是做这个工作,但与此同时它让我疯了一半。谢谢你的建议!

1 个答案:

答案 0 :(得分:0)

不要在同一个表上进行JOIN,而是尝试这个(假设您使用的是SQL Server)...

UPDATE Table1 
    set field1 = [table2 field1]
    , field2 = [table2 field2]
    , field3 = [table2 field3]
    , field4 = [table2 field4] 
FROM Table2 p        
WHERE database_id = 1 
    AND p.matchfield1 = 123456
    AND p.matchfield1 = matchfield1 AND p.matchfield2 = matchfield2

您还可以通过将AND c.matchfield1 = matchfield1 AND c.matchfield2 = matchfield2添加到WHERE子句来修改查询以加强过滤。