mysql從一張表中取出資料插入到另一張表

格調Line²⁰¹⁹發表於2021-01-01

最近有這樣一個需求,原來的訂單表wp_order設計不合理,原來的訂單表沒有訂單詳表,只有一張主表。現在是要重構訂單表,分為訂單主表wp_order_master和訂單詳表wp_order_detail,需要把原來的wp_order中的資料拆分後插入這兩張表。

我這裡總結有3種mysql插入語句方式,分別是:
以下表1為目標表,表2為原表

  1. 表結構一樣
insert into 表1select * from 表2

這個方式說白了就跟複製一樣,要求2張表的所有欄位一致,否則報錯。

  1. 表結構不一樣
insert into 表1 (列名1,列名2,列名3) select  列1,列2,列3 from 表2

這種也不能說是表結構不一樣,其實就是有選擇性的從表2取出資料對應表1欄位插入。

  1. 只從另外一個表取部分欄位
insert into 表1 (列名1,列名2,列名3) values(列1,列2,(select 列3 from 表2));

這種方式適用的情況是,在從表2取出部分欄位資料的同時,表1有新的欄位也需要資料,相當於第2種方式的升級版。

我這裡採用第2種方式:

INSERT INTO wp_order_master (id,order_number,order_code,uid,cTime,pay_time,total_price,is_pay,
alipay_price,wechat_price,balance_price,cash_price,union_price,active_id,active_price,coupon_id,coupon_price,
integral_num,integral_price,erase_price,use_packet_id,order_from) SELECT id,order_number,order_code,uid,cTime,pay_time,total_price,is_pay,
alipay_price,wechat_price,balance_price,cash_price,union_price,active_id,active_price,coupon_id,coupon_price,
integral_num,integral_price,erase_price,use_packet_id,order_from FROM wp_order WHERE id BETWEEN 10 AND 20;

裡面因為測試,select的where後面加了條件。
這裡也把原order表的id插入了order_master,作為主鍵更新order_detail表。

相關文章