使用两个表-Oracle更新语句

时间:2013-01-11 07:16:41

标签: oracle

我有两个表,我需要使用基于公共列的第一个表更新第二个表。

我使用了以下声明

UPDATE emp
  2      SET ename = ( SELECT dname
  3                    FROM dept
  4                    WHERE emp.deptno = dept.deptno)
  5      WHERE EXISTS
  6        ( SELECT dname
  7                    FROM dept
  8                    WHERE emp.deptno = dept.deptno);

但是我收到了错误

ORA-01427 - Single row subquery returns more than one row.

你能帮助我吗?

3 个答案:

答案 0 :(得分:0)

SELECT dname
FROM dept
WHERE emp.deptno = dept.deptno

查询必须返回单个记录。

检查

SELECT count(*), dname
FROM dept
group by dname
having count(*) > 1
order by 1 desc

或使用

SELECT dname
FROM dept
WHERE emp.deptno = dept.deptno
and rownum = 1

答案 1 :(得分:0)

你需要检查第一个子查询是否只返回1个值bcz如果这个子查询返回多于1行你要更新1个字段ename,其中2个值来自行,这就是为什么我猜你有这个错误

答案 2 :(得分:0)

您到dept表的子查询可能不会返回一行。添加minmax操作,从dept开始为emp的每一行获取一行。每个设置值必须是不明确的。

UPDATE emp
    SET ename = ( SELECT min dname
                  FROM dept
                  WHERE emp.deptno = dept.deptno)
    WHERE EXISTS
      ( SELECT dname
                  FROM dept
                  WHERE emp.deptno = dept.deptno);

备注1:默认情况下,SCOTT模式deptno是主键,因此不会遇到任何错误 备注2:您的问题不应放在serverfault.com中吗?