繁体   English   中英

如何更改此db2合并查询?

[英]How to change this db2 merge query?

有人能帮我吗? 我正在尝试将以下合并转换为另一个查询,并且只允许使用一次插入和更新:

MERGE INTO MYEMPLOYEE ME USING EMPLOYEE E ON ME.EMPNO = E.EMPNO 
WHEN MATCHED THEN 
UPDATE SET ME.SALARY = CASE WHEN ME.SALARY > E.SALARY THEN ME.SALARY ELSE E.SALARY END 
WHEN NOT MATCHED THEN 
INSERT VALUES(E.EMPNO, E.FIRSTNME, E.MIDINIT, E.LASTNAME, E.WORKDEPT, E.PHONENO, E.HIREDATE, E.JOB, E.EDLEVEL, E.SEX, E.BIRTHDATE, E.SALARY, E.BONUS, E.COMM);

我该如何实现? 上述合并将复制数据(如果不存在),如果存在,则将检查薪水并选择较高的薪水并复制该薪水。 如何仅使用一次插入和一次更新就可以达到相同的目的? 有人可以给我提示吗?

提前致谢 :)

假设MERGE命令的目的是考虑UPDATEINSERTDELETE多个动作。 合并说明

如果您不能/无法使用MERGE ,那么您必须求助于单独执行每个请求。

UPDATE MYEMPLOYEE ME
  SET ME.SALARY = (
    SELECT CASE WHEN ME.SALARY > E.SALARY THEN ME.SALARY ELSE E.SALARY END 
    FROM EMPLOYEE E 
    WHERE ME.EMPNO = E.EMPNO
 )
 WHERE EXISTS(
   SELECT 1 
   FROM EMPLOYEE E 
   WHERE ME.EMPNO = E.EMPNO
 );

然后在主表中不存在该雇员的地方进行插入。

INSERT INTO MYEMPLOYEE ME
  SELECT * 
  FROM EMPLOYEE E 
    LEFT OUTER JOIN MYEMPLOEE ME ON E.EMPNO=ME.EMPNO
  WHERE ME.EMPNO IS NULL;

如果需要进行一次完整扫描,则可以使用IMPORT命令。 但是随后您正在处理文件。 您将需要导出EMPLOYEE表(可能已经格式化了薪水),然后使用INSERT_REPLACE功能导入。

尝试之后,我注意到INSERT代码实际上应该是这样的:
1)不要重复使用Name ME
2)选择必要的列,因为连接后列数是两倍

INSERT INTO MYEMPLOYEE (
    SELECT E.EMPNO, E.FIRSTNME, E.MIDINIT, E.LASTNAME, E.WORKDEPT, E.PHONENO, E.HIREDATE, E.JOB, E.EDLEVEL, E.SEX, E.BIRTHDATE, E.SALARY, E.BONUS, E.COMM 
    FROM EMPLOYEE E LEFT OUTER JOIN MYEMPLOYEE ME ON E.EMPNO = ME.EMPNO WHERE ME.EMPNO IS NULL
);

暂无
暂无

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

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