Sql 从另一个表值更新表返回错误

Sql 从另一个表值更新表返回错误,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我有两个表Employee_Data和IOT_Codes_Temp,我想用IOT_Codes_Temp.IOT_Codes更新Employee_Data.IOT_Codes的记录。以下是我的疑问: UPDATE employee_data t1 SET ( t1.iot_codes, t1.iot_codes_numeric ) = (SELECT t2.iot_code,

我有两个表Employee_Data和IOT_Codes_Temp,我想用IOT_Codes_Temp.IOT_Codes更新Employee_Data.IOT_Codes的记录。以下是我的疑问:

UPDATE employee_data t1 
SET    ( t1.iot_codes, t1.iot_codes_numeric ) = (SELECT t2.iot_code, 
                                                        t2.iot_code_numeric 
                                                 FROM   ot_codes_temp t2 
                                                 WHERE 
       t2.office = t1.department); 
但它返回错误消息:ORA-01427:单行子查询返回多行。
请帮助我如何消除此错误。

错误消息说明了一切:更新语法需要一行,但子选择返回多行

选项1:限定子选择,使其仅返回一行

选项2:将您的=更改为IN或ANY,A或NOT


这取决于您尝试执行的操作。

您尝试使用的语法是INSERT语句。。这就够了

DECLARE @IOT_CODE INT;
DECLARE @IOT_CODE_NUMERIC INT;

SET @IOT_CODE=select t2.IOT_CODE From OT_CODES_TEMP t2,employee_data t1 Where t2.OFFICE=t1.DEPARTMENT;

SET @IOT_CODE_NUMERIC =select t2.IOT_CODE_NUMERIC From OT_CODES_TEMP t2,employee_data t1 Where t2.OFFICE=t1.DEPARTMENT;

update employee_data 
set 
IOT_CODES=@IOT_CODE ,
IOT_CODES_NUMERIC=@IOT_CODE_NUMERIC;
编辑

自从我投了反对票。。我进一步调查了这件事。。你也可以这样做


OP的问题是关于Oracle的,不是吗?他也有一个sql标签。。我相信oracle和sql具有相同的语法。。我想用多行更新多个数据,例如,信息技术有IOT_代码,因此它将分配给员工_数据中所有部门=信息技术的员工。
 UPDATE 
 (SELECT table1.value as OLD, table2.CODE as NEW
 FROM table1
 INNER JOIN table2
 ON table1.value = table2.DESC
 WHERE table1.UPDATETYPE='blah'
 ) t
 SET t.OLD = t.NEW