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);
我怎样才能做到这一点?如果不存在,则上述合并将复制数据,如果存在,则检查工资并选择较高的工资并复制该工资。 如何通过仅使用一个插入和一个更新来实现相同的目标?有人可以给我提示吗?
提前致谢:)
答案 0 :(得分:1)
MERGE
命令的目的是考虑UPDATE
,INSERT
,DELETE
的多个操作。 MERGE statement explained
如果您不能/无法使用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
能力导入。
答案 1 :(得分:0)
尝试后我发现INSERT代码应该是这样的:
1)不要两次使用名称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
);