0

这是我的第一篇文章,所以要温柔;)

我正在尝试根据&Table1中 2 列上的匹配数据更新列上的字段。Table 1Table 2

列名是:

Table1.KeyField = Table2.KeyField
Table1.FieldName = Table2.FieldName

要更新Table 1NumericValue列为零。

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

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

任何帮助表示赞赏。

谢谢

4

2 回答 2

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;

希望这可以帮助!!!

于 2013-10-11T10:26:55.237 回答
1
update t
set    t.NumericValue = ???
from   Table1 t
join   Table2 t2
on     t.KeyField = t2.KeyField
and    t.FieldName = t2.FieldName
于 2013-10-11T09:59:12.540 回答