我有一个包含一系列日期范围的表(EMP_ID、START_DATE、END_DATE)。我想要做的是确保它们都是连续的,因此对于任何给定的 EMP_ID,END_DATE 应该比下一个 START_DATE 小一个。
我有以下查询,可让我识别不连续的记录:
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 文档指出“目前,您不能更新表并从子查询中的同一个表中进行选择。”这可能是我的问题的一部分。
有任何解决方法的建议吗?
最佳答案
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
关于具有相同表子查询的 MySQL 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21751869/