Fab*_*aya 3 sql oracle syntax-error sql-merge
我有两张简单的桌子
CREATE TABLE employee (
emp_id INT PRIMARY KEY,
first_name VARCHAR(40),
last_name VARCHAR(40),
birth_day DATE,
sex VARCHAR(1),
salary INT,
super_id INT,
branch_id INT
);
CREATE TABLE biodata (
emp_id INT PRIMARY KEY,
first_name VARCHAR(40),
last_name VARCHAR(40),
birth_day DATE,
sex VARCHAR(1)
);
Run Code Online (Sandbox Code Playgroud)
我想合并它
merge into biodata c
using employee e
on (c.emp_id = e.emp_id)
when matched then
update set
c.emp_id=e.emp_id,
c.first_name=e.first_name,
c.last_name=e.last_name,
c.birth_day=e.birth_day,
c.sex=e.sex
when not matched then
insert VALUES(e.emp_id,e.first_name,e.last_name,e.birth_day,e.sex);
Run Code Online (Sandbox Code Playgroud)
但甲骨文说:
ORA-38104: ON 子句中引用的列无法更新: c.emp_id
只需删除c.emp_id=e.emp_idfromUPDATE子句,因为它不相关
(将在满足条件的UPDATE表的记录上进行。因此要更新的记录已经与 相同)。biodatac.emp_id = e.emp_idemp_ide.emp_id
merge into biodata c
using employee e
on (c.emp_id = e.emp_id)
when matched then
update set
--c.emp_id=e.emp_id,
c.first_name=e.first_name,
c.last_name=e.last_name,
c.birth_day=e.birth_day,
c.sex=e.sex
when not matched then
insert VALUES(e.emp_id,e.first_name,e.last_name,e.birth_day,e.sex);
Run Code Online (Sandbox Code Playgroud)
干杯!!