Mysqlは、Oracleと同じ関数へのマージを実装します

     現在、プロジェクトの実践では、同じテーブル構造の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番目の行のデータが追加されていることがわかります。

おすすめ

転載: blog.csdn.net/u013804636/article/details/108538386