我一直试图想出一个优雅的方法来做以下事情,让我们说我有下表:
+-----+---------+------------+--------------+------------+------------+--------+
| ID | EmpNum | Name | Title | StartDate | UpdateDate | IsCurr |
+-----+---------+------------+--------------+------------+------------+--------+
| 1 | 0000001 | John Smith | Engineer | 01/01/2017 | 01/02/2017 | N |
| 2 | 0000001 | John Smith | Sr. Engineer | 01/01/2017 | NULL | Y |
+-----+---------+------------+--------------+------------+------------+--------+
当员工的职位发生变化时,我想更新当前员工记录的UpdateDate
并将IsCurr
更改为N
,然后插入新记录,这将是当前一。例如,如果员工John Smith
在2017年3月1日晋升为Team Lead,那么结果表就是这样。
+ ----- + --------- + ------------ + -------------- + - ---------- + ------------ + ----
----+
| ID | EmpNum | Name | Title | StartDate | UpdateDate | IsCurr |
+-----+---------+------------+--------------+------------+------------+--------+
| 1 | 0000001 | John Smith | Engineer | 01/01/2017 | 01/02/2017 | N |
| 2 | 0000001 | John Smith | Sr. Engineer | 01/01/2017 | 01/03/2017 | N |
| 3 | 0000001 | John Smith | Team Lead | 01/01/2017 | NULL | Y |
+-----+---------+------------+--------------+------------+------------+--------+
据我所知,MySQL没有MERGE
函数所以我需要在2个单独的命令中使用它。与UPDATE
中的最新记录一样,然后插入新行。
在MySQL中有更好的方法吗?
提前致谢。
答案 0 :(得分:1)
您可以尝试使用INSERT INTO ... ON DUPLICATE KEY排列所需的查询。但是你需要ID作为索引。 它从MySQL 5.5版开始提供。
INSERT INTO table (ID, EmpNum, Name, Title, StartDate, UpdateDate, IsCurr)
VALUES
(3, '0000001', 'John Smith', 'Team Lead', '01/01/2017', NULL, 'Y'),
(2, '0000001', 'John Smith', 'Sr. Engineer', '01/01/2017', '01/03/2017', 'N')
ON DUPLICATE KEY UPDATE isCurr='N', UpdateDate='01/03/2017';