我有两个表,我需要使用基于公共列的第一个表更新第二个表。
我使用了以下声明
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.
你能帮助我吗?
答案 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
表的子查询可能不会返回一行。添加min
或max
操作,从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中吗?