Khi chèn dữ liệu từ bảng này sang bảng khác (INSERT INTO ... SELECT), có thể thêm cột giá trị cố định không có trong bảng nguồn.
Cách 1: Viết thẳng giá trị trong SELECT
INSERT INTO bang_dich (cot1, cot2, cot3)
SELECT cot1, cot2, 'gia_tri_tinh'
FROM bang_nguon;
Cách 2: Dùng biến phiên (session variable)
SET @bien = 'gia_tri_tinh';
INSERT INTO bang_dich (cot1, cot2, cot3)
SELECT cot1, cot2, @bien
FROM bang_nguon;
Ví dụ minh họa
Bảng nguồn First_table:
CREATE TABLE First_table (
Id INT NOT NULL AUTO_INCREMENT,
FirstValue INT, SecondValue INT, PRIMARY KEY (Id)
);
INSERT INTO First_table (FirstValue, SecondValue) VALUES
(10,14), (12,13), (100,110), (45,55);
Bảng đích Second_table có 3 cột giá trị:
CREATE TABLE Second_table (
Id INT NOT NULL AUTO_INCREMENT,
Value1 INT, Value2 INT, Value3 INT, PRIMARY KEY (Id)
);
Cách 1: Giá trị tĩnh 45
INSERT INTO Second_table (Value1, Value2, Value3)
SELECT FirstValue, SecondValue, 45 FROM First_table;
+----+--------+--------+--------+
| Id | Value1 | Value2 | Value3 |
+----+--------+--------+--------+
| 1 | 10 | 14 | 45 |
| 2 | 12 | 13 | 45 |
| 3 | 100 | 110 | 45 |
| 4 | 45 | 55 | 45 |
+----+--------+--------+--------+
Cách 2: Biến @staticValue = 20
SET @staticValue = 20;
INSERT INTO Second_table (Value1, Value2, Value3)
SELECT FirstValue, SecondValue, @staticValue FROM First_table;
+----+--------+--------+--------+
| Id | Value1 | Value2 | Value3 |
+----+--------+--------+--------+
| 1 | 10 | 14 | 20 |
| 2 | 12 | 13 | 20 |
| 3 | 100 | 110 | 20 |
| 4 | 45 | 55 | 20 |
+----+--------+--------+--------+
Chọn cách nào? Cách 1 đơn giản cho giá trị hằng. Cách 2 linh hoạt nếu giá trị tính toán phức tạp hoặc dùng lại nhiều lần.