2017-04-06 94 views
0

我一直在試圖想出一個優雅的方式來做到以下幾點,讓我們說,我有以下表格:MySQL的更新當前記錄表

+-----+---------+------------+--------------+------------+------------+--------+ 
| 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在01/03/2017被提升爲團隊領導,那麼結果表就會這樣。

+ ----- + --------- + ------------ + -------------- + - ----------- + ------------ + ----

----+ 
| 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中有更好的方法嗎?

在此先感謝。

回答

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'; 
+0

我確實考慮過'對重複KEY'但我插入一個完全新的記錄到該表中,所以我需要通過一些其他的領域,以驗證的同一員工的先前記錄的存在。 – Alistair

+0

不確定是否過度使用,但如果使用子查詢來選擇最近的記錄並在INSERT INTO的VALUES中使用它可能會起作用。 – Dez