日期:2014-05-17  浏览次数:20914 次

oracle数据库插入列
如图:
图1
图2
我想通过图1中的dept_code_8字段来进行选择,有相同的dept_code_8就把dept_code_9选择出来,插入图2中对应的dept_code_9这一列,该怎么实现。我写的下面这段代码报错:单行子查询返回多个值

update TMP_FINAL 
set TMP_FINAL.dept_code_9=
(select tmp_huiduishuju.dept_code_9
from tmp_huiduishuju
where tmp_final.dept_code_8=tmp_huiduishuju.dept_code_8)

注意是在oracle数据库中更新表。求指点

------解决方案--------------------
错误已经说的很明白了,是因为一个行的值仅能插入一个数值,你是把多个值插入到了一列中,所以就报错了。我的解决方法是,你先用分析函数,按照dept_code_8进行分组,按照dept_code_9进行排序,在每列后面加个序列号。然后,再更新时,只取序列号=2的值,这样就不会报错了
------解决方案--------------------
原因是TMP_FINAL一个行的dept_code_8对应于tmp_huiduishuju表中中的dept_code_8有多个dept_code_9。
你看下业务,是不是一一对应的,如果是就是数据问题。如果不是,需要取出分组后的哪一个。
------解决方案--------------------
update TMP_FINAL 
set TMP_FINAL.dept_code_9=
(select tmp_huiduishuju.dept_code_9
from tmp_huiduishuju
where tmp_final.dept_code_8=tmp_huiduishuju.dept_code_8 and rownum <=1)
where exists(select 1 from tmp_huiduishuju where tmp_final.dept_code_8=tmp_huiduishuju.dept_code_8)


如果重复的就选择第一个