การคัดลอกข้อมูลระหว่างตารางพร้อมกำหนดค่าคงที่ด้วย INSERT ... SELECT
คำสั่ง INSERT INTO ... SELECT ช่วยคัดลอกข้อมูลจากตารางต้นทางไปตารางปลายทางได้ใน Query เดียว พร้อมสามารถกำหนดค่าคงที่ (Literal) ให้คอลัมน์ที่ไม่มีในตารางต้นทาง
ตัวอย่างการใช้งาน
สร้างตารางต้นทางและเพิ่มข้อมูล:
mysql> CREATE TABLE insertOneToAnotherTable (
-> Value INT
-> );
Query OK, 0 rows affected (0.60 sec)
mysql> INSERT INTO insertOneToAnotherTable VALUES(100), (200), (300), (400), (500), (600);
Query OK, 6 rows affected (0.12 sec)
ข้อมูลต้นทาง:
mysql> SELECT * FROM insertOneToAnotherTable;
+-------+
| Value |
+-------+
| 100 |
| 200 |
| 300 |
| 400 |
| 500 |
| 600 |
+-------+
6 rows in set (0.00 sec)
สร้างตารางปลายทาง (มีคอลัมน์เพิ่ม Value2):
mysql> CREATE TABLE receiveDateFromTable (
-> Value1 INT,
-> Value2 INT
-> );
Query OK, 0 rows affected (0.83 sec)
คัดลอก Value ไป Value1 และตั้ง Value2 = 1000 คงที่:
mysql> INSERT INTO receiveDateFromTable(Value1, Value2)
-> SELECT Value, 1000 FROM insertOneToAnotherTable;
Query OK, 6 rows affected (0.14 sec)
Records: 6 Duplicates: 0 Warnings: 0
ตรวจสอบตารางปลายทาง:
mysql> SELECT * FROM receiveDateFromTable;
+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 100 | 1000 |
| 200 | 1000 |
| 300 | 1000 |
| 400 | 1000 |
| 500 | 1000 |
| 600 | 1000 |
+--------+--------+
6 rows in set (0.00 sec)
คำอธิบายและประยุกต์ใช้
SELECT Value, 1000→ คอลัมน์แรกจากตารางต้นทาง, คอลัมน์ที่สองเป็น Literal คงที่- สามารถใช้ Expression ได้:
SELECT Value, Value * 10, NOW() ... - จำนวนและลำดับคอลัมน์ใน
INSERT INTO (col1, col2)ต้องตรงกับSELECT col1, col2 - ใช้ได้กับ
INSERT IGNORE,REPLACE INTO,ON DUPLICATE KEY UPDATEเช่นกัน
กรณีคอลัมน์ AUTO_INCREMENT: หากตารางปลายทางมี PK Auto Increment ให้เว้นคอลัมน์นั้นไว้ใน INSERT (ไม่ระบุในรายการคอลัมน์ และไม่ SELECT มา)