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

Thêm cột tạm thời trong MySQL với giá trị phụ thuộc vào cột khác?

Bạn có thể sử dụng câu lệnh CASE để tạo một cột tạm thời (computed column) trong truy vấn SELECT, nơi giá trị được tính toán dựa trên điều kiện của cột khác.

Tạo bảng nhân viên

mysql> CREATE TABLE DemoTable (
    -> EmployeeId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> EmployeeName VARCHAR(20),
    -> EmployeeSalary INT,
    -> EmployeeExperience INT
    -> );

Chèn dữ liệu mẫu

mysql> INSERT INTO DemoTable(EmployeeName, EmployeeSalary, EmployeeExperience) VALUES('Larry', 4500, 5);
mysql> INSERT INTO DemoTable(EmployeeName, EmployeeSalary, EmployeeExperience) VALUES('Mike', 130000, 8);
mysql> INSERT INTO DemoTable(EmployeeName, EmployeeSalary, EmployeeExperience) VALUES('Sam', 11000, 5);
mysql> INSERT INTO DemoTable(EmployeeName, EmployeeSalary, EmployeeExperience) VALUES('Carol', 140000, 8);

Xem dữ liệu gốc

mysql> SELECT * FROM DemoTable;
+------------+--------------+----------------+--------------------+
| EmployeeId | EmployeeName | EmployeeSalary | EmployeeExperience |
+------------+--------------+----------------+--------------------+
| 1          | Larry        | 4500           | 5                  |
| 2          | Mike         | 130000         | 8                  |
| 3          | Sam          | 11000          | 5                  |
| 4          | Carol        | 140000         | 8                  |
+------------+--------------+----------------+--------------------+

Tạo cột tạm thời NewSalary dựa trên kinh nghiệm

mysql> SELECT EmployeeId, EmployeeName, EmployeeSalary, EmployeeExperience,
    -> CASE 
    ->     WHEN EmployeeExperience = 5 THEN EmployeeSalary + 10000
    ->     WHEN EmployeeExperience = 8 THEN EmployeeSalary + 20000
    ->     ELSE NULL
    -> END AS NewSalary
    -> FROM DemoTable;

Kết quả

+------------+--------------+----------------+--------------------+-----------+
| EmployeeId | EmployeeName | EmployeeSalary | EmployeeExperience | NewSalary |
+------------+--------------+----------------+--------------------+-----------+
| 1          | Larry        | 4500           | 5                  | 14500     |
| 2          | Mike         | 130000         | 8                  | 150000    |
| 3          | Sam          | 11000          | 5                  | 21000     |
| 4          | Carol        | 140000         | 8                  | 160000    |
+------------+--------------+----------------+--------------------+-----------+

Lưu ý quan trọng

  • Cột NewSalary chỉ tồn tại trong kết quả truy vấn, không được lưu trữ trong bảng
  • Cú pháp CASE WHEN ... THEN ... ELSE ... END cho phép logic điều kiện phức tạp
  • Có thể sử dụng CASE đơn giản (so sánh giá trị) hoặc CASE tìm kiếm (điều kiện boolean)