簡體   English   中英

ORA-01427 UPDATE自加入ORACLE

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

兩個表,每個表都有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;

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

我已經嘗試了rownum=1但這使得所有manager_id相同。

選擇一個給定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

問題的根本原因是在表employees或表中, employee last_name不是唯一的。 當你在姓氏上加入表格時,你會得到更多的一行。 您可以使用下一個查詢進行檢查:

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; 

可能存在更合適的列來加入它,例如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