简体   繁体   English

ORA-01427 UPDATE自加入ORACLE

[英]ORA-01427 while UPDATE self-join ORACLE

two tables, each has employee_id and manager_id which links to employee_id Tables have different employee_id. 两个表,每个表都有employee_id和manager_id,链接到employee_id表有不同的employee_id。

UPDATE employee u
SET u.manager_id = (SELECT m.id
    FROM employee e
    JOIN old_db.employees oe ON e.last_name = oe.last_name
    JOIN old_db.employees om ON oe.manager_id = om.employee_id
    INNER JOIN employee m ON m.last_name = om.last_name
    WHERE e.id = u.id)
WHERE manager_id IS NULL;

gives

ERROR at line 2: ORA-01427: single-row subquery returns more than one row

I've tried rownum=1 but this makes all manager_id same. 我已经尝试了rownum=1但这使得所有manager_id相同。

Select query with one given employee_id returns one value 选择一个给定employee_id查询返回一个值

SQL> SELECT m.id
  2     FROM employee e
  3     JOIN old_db.employees oe ON e.last_name = oe.last_name
  4     JOIN old_db.employees om ON oe.manager_id = om.employee_id
  5     INNER JOIN employee m ON m.last_name = om.last_name
  6     WHERE e.id = 1805;

        ID
----------
      1804

Well the root cause of problem is in table employees or in table employee last_name are not unique. 问题的根本原因是在表employees或表中, employee last_name不是唯一的。 And when you join table on last name you get more then one row. 当你在姓氏上加入表格时,你会得到更多的一行。 You may check it with next query: 您可以使用下一个查询进行检查:

SELECT e.id, count(*), count(distinct m.id)
FROM employee e
JOIN old_db.employees oe ON e.last_name = oe.last_name
JOIN old_db.employees om ON oe.manager_id = om.employee_id
INNER JOIN employee m ON m.last_name = om.last_name
GROUP BY e.id; 

May be exists more suitable column to join it for example employee_id if so you query may be rewritten to: 可能存在更合适的列来加入它,例如employee_id如果这样你可以将查询重写为:

UPDATE employee u
SET u.manager_id = (SELECT oe.manager_id 
                    FROM old_db.employees oe
                   WHERE oe.employee_id = u.id)
WHERE manager_id IS NULL;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM