Bootstrap

达梦数据库merge into更新多个字段,插入特定字段的使用

在达梦数据库的官方文档里有介绍merge into的用发,可以参考
merge into的使用
这个示例里用到的语句是

MERGE INTO dmhr.dup_emp
     USING dmhr.emp_salary
        ON (dmhr.dup_emp.employee_id = dmhr.emp_salary.employee_id)
WHEN MATCHED
THEN
   UPDATE SET dmhr.dup_emp.salary = dmhr.emp_salary.new_salary
WHEN NOT MATCHED
THEN
   INSERT VALUES (dmhr.emp_salary.employee_id,
                      'dm2020',
                      410107197103257999,
                      dmhr.emp_salary.new_salary,
                      102);

这个示例问题,就是只介绍了一个字段更新时的情况,还只介绍了全字段更新的情况,这种情况算是比较特殊了,想更新多个字段,插入部分字段怎么写呢?查阅了一些资料,得到的结论是

MERGE INTO dmhr.dup_emp a
     USING dmhr.emp_salary b
        ON (a.employee_id = b.employee_id)
WHEN MATCHED
THEN
   UPDATE SET a.salary = b.new_salary,
   a.department_id=b.department_id
WHEN NOT MATCHED
THEN
   INSERT (a.department_id,a.salary) VALUES (b.employee_id,b.new_salary);

可以看到:

  1. 多个更新操作中间用逗号隔开即可
  2. 特定多个字段插入,在INSERT语句后填入“目标表名.字段名”,在VALUES中填入“源表名.字段名”即可。

有一点需要注意的,我用以下方式时候报错,所以还是能将表起别名就起个别名,用起来也方便
错误示范:

MERGE INTO dmhr.dup_emp a
     USING dmhr.emp_salary b
        ON (dmhr.dup_emp.employee_id = dmhr.emp_salary.employee_id)
WHEN MATCHED
THEN
   UPDATE SET dmhr.dup_emp.salary = dmhr.emp_salary.new_salary,
   dmhr.dup_emp.department_id=dmhr.emp_salary.department_id
WHEN NOT MATCHED
THEN
   INSERT (dmhr.dup_emp.department_id,dmhr.dup_emp.salary) 
   VALUES (dmhr.emp_salary.employee_id,dmhr.emp_salary.new_salary);
;