这是我的第一篇帖子,所以要温柔;)
我正在尝试根据Table1
&中{2}列中2列的匹配数据更新Table 1
列上的字段Table 2
。
列名是:
Table1.KeyField = Table2.KeyField
Table1.FieldName = Table2.FieldName
Table 1
中要更新的列NumericValue
为零。
我尝试过的每一种方式都会导致错误:
子查询返回的值超过1。这是不允许的 子查询跟随=,!=,<,< =,>,> =或当子查询用作 表达。
任何帮助表示感谢。
由于
答案 0 :(得分:1)
update t
set t.NumericValue = ???
from Table1 t
join Table2 t2
on t.KeyField = t2.KeyField
and t.FieldName = t2.FieldName
答案 1 :(得分: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);
您是否要将Table1中的列更新为:
-- 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) ;
然后它是错误的,因为您可以看到您创建的子查询以选择更新所需的数据Targetcolumntoupdate将返回多个可能的值。
正确查询如下:
Update T1
Set T1.Targetcolumntoupdate = (T2.Sourcecolumntoupdate)
FROM Table1 T1
INNER JOIN Table2 T2 ON
T1.KeyField = T2.KeyField AND T1.FieldName = T2.FieldName;
希望这有帮助!!!