現在、プロジェクトの実践では、同じテーブル構造の2つのデータを組み合わせる必要がある関数があります。要件は、データを照合してから更新および挿入できることです。Oracleで文法へのマージを使用して、この関数。同様の構文をmysqlに実装できます。
insert into 表名(表字段,表字段,表字段,表字段) select a.字段名,a.字段名,a.字段名 from 表2 a on duplicate key update 表1.待更新字段=表2.字段...;
例:
新しいテーブルテストを作成します。
CREATE TABLE `test` (
`key1` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
`key2` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`key3` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`key1`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
新しいテーブルtest1を作成します。
CREATE TABLE `test1` (
`key1` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
`key2` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`key3` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`key1`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
2つのテーブルには、同じである一意のインデックスが少なくとも1つ必要であることに注意してください。
次に、データを個別に挿入します。テスト
test1:
SQLステートメントを実行します。
insert into test(key1,key2,key3)
select a.key1,a.key2,a.key3 from test1 a
on duplicate key update key2 = a.key2,key3 = a.key3;
実行結果:テストテーブルのデータ変更:
最初の行の赤いボックスのデータが更新され、5番目の行のデータが追加されていることがわかります。