2014-02-13 38 views
3

我有一个包含一系列日期范围的表(EMP_ID,START_DATE,END_DATE)。我想要做的是确保它们都是连续的,因此对于任何给定的EMP_ID,END_DATE应该比下一个START_DATE小1。
我有以下查询,让我找出不连续的记录:带有相同表子查询的MySQL更新

SELECT H.EMP_ID, 
     H.START_DATE, 
     H.END_DATE, 
     DATE(
       ( SELECT MIN(START_DATE) 
         FROM TSRHierarchy I 
         WHERE I.START_DATE > H.START_DATE 
         AND I.EMP_ID = H.EMP_ID 
       ) 
      ) AS NEXT_DATE 
    FROM TSRHierarchy H 
    HAVING END_DATE <> DATE_ADD(NEXT_DATE, INTERVAL -1 DAY) 
ORDER BY H.EMP_ID, H.START_DATE; 

什么我不能做的是弄清楚如何把它变成一个UPDATE语句? MySQL文档状态为'目前,您无法更新表并从子查询中的同一个表中进行选择。'这可能是我的问题的一部分。
任何有关解决方法的建议?

回答

1

试试这个UPDATE query using JOIN

UPDATE TSRHierarchy t 
     JOIN 
      (SELECT H.EMP_ID, 
        H.START_DATE, 
        H.END_DATE, 
        DATE((SELECT MIN(START_DATE) 
           FROM TSRHierarchy I 
             WHERE I.START_DATE > H.START_DATE 
             AND I.EMP_ID = H.EMP_ID 
         )) AS NEXT_DATE 
      FROM TSRHierarchy H 
      HAVING END_DATE <> DATE_ADD(NEXT_DATE, INTERVAL -1 DAY) 
      ) AS t2 
     ON t.EMP_ID = t2.EMP_ID 
SET t.END_DATE = t2.NEXT_DATE 
+0

完美,非常感谢。 – Michael