首页 > 解决方案 > 如何在单个表中应用合并

问题描述

我想使用合并更新我的表。因此,当员工加入另一家公司时,其新的(加入日期)将在他之前的条目中更新为(退出日期)。约束(((there is no unique id and name)))(((sno, ename, dept, comp, doj, doe)))这些是表 emp 中的属性。

这是我必须更新的表。

Sno ENAME   COMP    DEPT    DOJ         DOE 
-----------------------------------------------
1   rock    mi      it  10-AUG-18    -  
2   dock    apple   it  12-AUG-18    -  
3   rock    google  it  01-AUG-70    -  
4   dock    samsung it  26-AUG-89    -  

应用合并后它应该看起来像。

Sno ENAME   COMP    DEPT    DOJ         DOE 
-----------------------------------------------
1   rock    mi      it  10-AUG-18    01-AUG-70  
2   dock    apple   it  12-AUG-18    26-AUG-89  
3   rock    google  it  01-AUG-70    -  
4   dock    samsung it  26-AUG-89    -

标签: sqloraclesql-update

解决方案


在这种情况下,您可以直接使用更新,因为在这种情况下合并语句可能会出现问题。

UPDATE MYTABLE M1
SET M1.DOE = (SELECT DOJ FROM (SELECT M2.DOJ, 
ROW_NUMBER() OVER (PARTITION BY M2.ENAME ORDER BY M2.DOJ) AS RN 
FROM MYTABLE M2 
WHERE M1.ENAME = M2.ENAME
AND M1.COMP <> M2.COMP
AND M2.DOJ < M1.DOJ
) WHERE RN = 1)

此外,您可以在 UPDATE 语句中使用 WHERE 子句来限制没有更改其工作的记录或第一个工作的记录,以避免使用空值进行不必要的更新。

干杯!!


推荐阅读