我无法将一个表更新到oracle 11g中的另一个表

时间:2017-09-05 06:02:41

标签: sql oracle oracle11g sql-update

UPDATE STOCKVALUE A 
     SET A.LOCATION=(SELECT B.LOCID FROM DCCUMINVBASIC B WHERE A.MAPNAME='invdc4')
  

错误:ORA-01427:单行子查询返回多行

4 个答案:

答案 0 :(得分:0)

在此查询中

(SELECT B.LOCID FROM DCCUMINVBASIC B WHERE A.MAPNAME='invdc4')

你在桌子B上,而你正试图在桌子A上创造条件。这没有任何意义。

您的查询应如下所示:

(SELECT B.LOCID FROM DCCUMINVBASIC B WHERE B.XXXX='yyyyy')

它应该返回一个值(1行和1列结果)。

答案 1 :(得分:0)

在这种情况下,最好通过提供多个结果来了解哪些行导致问题。 要了解导致问题的行,您应首先创建一个select语句,如:

SELECT (SELECT COUNT(*) FROM DCCUMINVBASIC B WHERE A.MAPNAME='invdc4') CNT FROM STOCKVALUE A;

在这种情况下,检查count大于1的行,并在继续update语句之前先修复select。

答案 2 :(得分:0)

尝试执行此查询(也使用DISTINCT):

SELECT B.LOCID FROM DCCUMINVBASIC B WHERE A.MAPNAME='invdc4'

你会看到错误是什么。

答案 3 :(得分:-1)

错误代码抱怨的是查询

  

从DCCUMINVBASIC B中选择B.LOCID A.MAPNAME =' invdc4'

返回多行,因此外部查询无法执行,因为它需要单个值。