MERGE INTO table
USING data_source
ON (condition)
WHEN MATCHED THEN update_clause
WHEN NOT MATCHED THEN insert_clause;
MERGE INTO employee AS e
USING (SELECT empno, firstnme, midinit, lastname, workdept, phoneno,
hiredate, job, edlevel, sex, birthdate, salary FROM my_emp) AS m
ON e.empno = m.empno
WHEN MATCHED THEN
UPDATE SET (salary) = (m.salary)
或
delete
WHEN NOT MATCHED THEN
INSERT (empno, firstnme, midinit, lastname, workdept, phoneno,
hiredate, job, edlevel, sex, birthdate, salary)
VALUES (m.empno, m.firstnme, m.midinit, m.lastname,
m.workdept, m.phoneno, m.hiredate, m.job, m.edlevel,
m.sex, m.birthdate, m.salary)
可以参考这个例子试试 对上面 SQL 的解释如下
使用表 my_emp 联合表 employee,根据两个表的比照(ON e.empno = m.empno),
如果存在这样的记录,则使用 表 my_emp 的 salary 值来更新表 employee 的 salary 的值或删除;
如果不存在符合条件的记录,则将表 my_emp 中的数据插入到表 employee 中去。
可以理解为 先更新数据,更新不了就插入数据或删除。
可以省略其中一个update、delete 或insert子句
2009-04-14