2014-10-01 49 views
-2

我有两个表Employee_DataIOT_Codes_Temp,我想更新Employee_Data.IOT_CodesIOT_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:单行子查询返回不止一行。 帮助我如何摆脱这个错误。

回答

-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 
[email protected]_CODE , 
[email protected]_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 
+0

OP的问题是关于'Oracle',不是吗? – 2014-10-01 06:16:41

+0

他也有一个sql标签..我相信oracle和sql有相同的语法.. [Oracle Docs](http://docs.oracle.com/javadb/10.5.3.0/ref/rrefsqlj26498.html) – Rafay 2014-10-01 06:22:18

-1

错误消息说明了一切:您的“更新”语法需要一行,但您的子查询返回多行。

选项1:符合你的子查询,以便它只返回一行

选项2:改变你的 “=” 到 “IN”(或 “ANY”, “A””或 “不”)

这取决于你想要做的事。

+0

我想更新与例如多行多数据信息技术具有IOT_Code IT,因此IT将分配给Employee_Data中拥有Department = Information Technology的所有员工。 – ZahidKakar 2014-10-01 06:31:46