序文
多くの場合、この要件があります。条件に従って1つのテーブルの特定のフィールドのデータをクエリし、それを別のテーブルに挿入する必要があります。これは、テーブル間のデータの転送です。
このシナリオでは、通常、履歴データを同期する必要があります。
2つのテーブルがAとBであり、テーブル構造が異なるが、一部のフィールドが同じ意味を持っていると仮定します。
データが少ない場合は、データを挿入する必要があるテーブルに手動で入力することをお勧めします。しかし、それらが何千もある場合、手動の方法は絶対に受け入れられません。以下の例、SQLを介して達成する方法を参照してください。
1.データの準備
1.テーブル構造
1)ヘルプテーブルt_helpを作成します
CREATE TABLE `t_help` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` int(10) DEFAULT NULL COMMENT '用户ID',
`problems` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '问题描述',
`create_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='帮助表';
2)返信フォームt_replyを作成します
CREATE TABLE `t_reply` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`help_id` int(10) NOT NULL COMMENT '帮助表_主键ID',
`problems` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '问题描述',
`reply` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '回复内容',
`create_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='回复表';
2.テーブルデータ
1)ヘルプテーブルt_helpにデータを挿入します
このとき、応答テーブルのt_replyデータは空であり、データは挿入されていません。
2.需要
ヘルプテーブルt_helpのデータを応答テーブルt_replyに転送したいのですが、フィールド値間の対応する関係は次のとおりです:
t_helpテーブル t_replyテーブル
問題->問題
id-> help_id
現在の時刻-> create_date
固定値->返信
説明:
t_replyテーブルでは、応答値が固定テキスト「default one content」に挿入され、create_dateの値が現在の時刻に挿入され、残りのフィールド はt_helpテーブルに対応します。
三、実現方法
1.SQLテンプレート
INSERT INTO `目标表`(各个字段)
(
SELECT
各个字段 或者 固定值
FROM
来源表
WHERE
条件
);
説明:
1)まず、通常の書き込み方法に従って、ターゲットテーブルの挿入ステートメントを書き込みます。
2)通常、以下に示すように、最初の閉じ括弧)の後に値が続きます。
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....);
ここの直後に括弧のペアが続き、クエリステートメントは括弧内に記述できます。
3)queryステートメントは、ソーステーブルのクエリを書き込みます。
2.SQLの実装
INSERT INTO `t_reply`(help_id,problems,reply,create_date)
(
SELECT
id,
problems,
'默认一个内容',
NOW( )
FROM
t_help
WHERE
1 = 1
);
ここで、固定文字列コンテンツの場合は一重引用符で直接ラップし、現在の時刻の場合はNOW()関数を使用します。クエリステートメントは、1 = 1の場合に追加する必要はありません。
上記のステートメントを実行することにより、t_helpテーブルからt_replyテーブルへのデータ転送が完了します〜
このとき、t_replyテーブルデータは空ではなく、テーブルデータを次の図に示します。