Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Thêm giá trị tĩnh (static) khi INSERT INTO SELECT trong MySQL

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.