を現在のレコードを更新します。私は、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 |
+-----+---------+------------+--------------+------------+------------+--------+
従業員の変化のタイトル現従業員レコードのを更新し、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で行うより良い方法はありますか?
ありがとうございます。
私はDUPLICATE KEY' ON 'を検討しましたが、私はそのテーブルに完全に新しいレコードを挿入していますので、私はいくつかの他のフィールドを経由して同じ従業員の前のレコードの存在を確認する必要があります。 – Alistair
あまりにも頭がおかしいのかどうかはわかりませんが、サブクエリを使用して最新のレコードをSELECTし、INSERT INTOのVALUESの内部で使用するとうまくいく可能性があります。 – Dez