gpt4 book ai didi

MySQL 更新表中的当前记录

转载 作者:行者123 更新时间:2023-11-29 10:54:18 25 4
gpt4 key购买 nike

我一直在尝试想出一种优雅的方式来执行以下操作,假设我有下表:

+-----+---------+------------+--------------+------------+------------+--------+
| 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当前员工记录及变更IsCurrN ,然后插入新记录,该记录将成为当前记录。例如,如果员工 John Smith于 01/03/2017 晋升为 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函数,所以我需要在两个单独的命令中执行此操作。如 UPDATE最新的记录,然后插入新行。在 MySQL 中是否有更好的方法来做到这一点?

提前致谢。

最佳答案

您可以尝试使用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';

关于MySQL 更新表中的当前记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43253475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com