Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据另一个表中匹配的2个字段更新字段_Sql_Tsql_Sql Update - Fatal编程技术网

Sql 根据另一个表中匹配的2个字段更新字段

Sql 根据另一个表中匹配的2个字段更新字段,sql,tsql,sql-update,Sql,Tsql,Sql Update,这是我的第一篇帖子,所以请温柔一点;) 我正试图根据表1和表2中两列上的匹配数据更新表1列上的字段 列名为: Table1.KeyField = Table2.KeyField Table1.FieldName = Table2.FieldName 表1中要更新的列为带零的数值 我尝试过的每一种方法都会导致错误: 子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情 谢谢你的帮助 谢谢样本数据: create table Table1 (KeyField in

这是我的第一篇帖子,所以请温柔一点;)

我正试图根据
表1
表2
中两列上的匹配数据更新
表1
列上的字段

列名为:

Table1.KeyField = Table2.KeyField
Table1.FieldName = Table2.FieldName
表1中要更新的列为带零的数值

我尝试过的每一种方法都会导致错误:

子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情

谢谢你的帮助

谢谢

样本数据:

create table Table1 (KeyField int,FieldName varchar(20),Targetcolumntoupdate numeric(5,2));
create table Table2 (KeyField int,FieldName varchar(20),Sourcecolumntoupdate numeric(5,2));
insert into Table1 values  (1,'F1',0.00);
insert into Table1 values  (2,'F1',0.00);
insert into Table2 values  (1,'F1',1.00);
insert into Table2 values  (1,'F1',2.00);
是否尝试将表1中的列更新为:

-- Wrong approach possible cause of error stated
Update Table1
Set Table1.Targetcolumntoupdate = 
( SELECT (T2.Sourcecolumntoupdate)
FROM Table1 T1 
INNER JOIN Table2 T2 ON
T1.KeyField = T2.KeyField AND T1.FieldName = T2.FieldName) ; 
然后它是错误的,因为您可以看到为选择更新targetColumntUpdate所需的数据而创建的子查询将返回多个可能的值

正确的查询如下:

Update T1
Set T1.Targetcolumntoupdate = (T2.Sourcecolumntoupdate)
FROM Table1 T1 
INNER JOIN Table2 T2 ON
T1.KeyField = T2.KeyField AND T1.FieldName = T2.FieldName;

希望这有帮助

您的更新查询在哪里?我们应该如何帮助您更正sql查询而不查看它?独立运行子查询。看看它回来了。决定您想要哪一行,并确定获取该行的方法。
Update T1
Set T1.Targetcolumntoupdate = (T2.Sourcecolumntoupdate)
FROM Table1 T1 
INNER JOIN Table2 T2 ON
T1.KeyField = T2.KeyField AND T1.FieldName = T2.FieldName;