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

时间:2014-10-01 05:44:11

标签: sql oracle oracle10g

我有两个表Employee_DataIOT_Codes_Temp,我想用Employee_Data.IOT_Codes更新IOT_Codes_Temp.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:单行子查询返回多行。 帮助我摆脱这个错误。

2 个答案:

答案 0 :(得分:-1)

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

选项1:限定您的子选择,使其只返回一行

选项2:改变你的" ="到" IN" (或"任何"," A""或" NOT")

这取决于你想要做什么。

答案 1 :(得分:-1)

您尝试使用的语法是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;

修改

因为我投了一票......我进一步研究了这个......你也可以这样做.. Reference

 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