Giới thiệu
MySQL không hỗ trợ trực tiếp mệnh đề GROUP BY trong câu lệnh UPDATE. Tuy nhiên, bạn có thể đạt được hiệu quả tương tự bằng cách sử dụng ORDER BY ... LIMIT để cập nhật một bản ghi cụ thể trong nhóm.
Ví dụ minh họa
Bước 1: Tạo bảng
CREATE TABLE DemoTable2018 (
EmployeeId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
EmployeeName VARCHAR(20),
EmployeeSalary INT
);
Bước 2: Chèn dữ liệu mẫu
INSERT INTO DemoTable2018 (EmployeeName, EmployeeSalary) VALUES ('Chris', 10000);
INSERT INTO DemoTable2018 (EmployeeName, EmployeeSalary) VALUES ('David', 12560);
INSERT INTO DemoTable2018 (EmployeeName, EmployeeSalary) VALUES ('Chris', 25400);
Bước 3: Xem dữ liệu ban đầu
SELECT * FROM DemoTable2018;
+------------+--------------+----------------+
| EmployeeId | EmployeeName | EmployeeSalary |
+------------+--------------+----------------+
| 1 | Chris | 10000 |
| 2 | David | 12560 |
| 3 | Chris | 25400 |
+------------+--------------+----------------+
Bước 4: Cập nhật lương cho bản ghi đầu tiên của 'Chris' (theo EmployeeId)
UPDATE DemoTable2018
SET EmployeeSalary = EmployeeSalary + 2500
WHERE EmployeeName = 'Chris'
ORDER BY EmployeeId LIMIT 1;
Bước 5: Kiểm tra lại
SELECT * FROM DemoTable2018;
+------------+--------------+----------------+
| EmployeeId | EmployeeName | EmployeeSalary |
+------------+--------------+----------------+
| 1 | Chris | 12500 |
| 2 | David | 12560 |
| 3 | Chris | 25400 |
+------------+--------------+----------------+
Giải thích: Mệnh đề ORDER BY EmployeeId LIMIT 1 đảm bảo chỉ bản ghi có EmployeeId nhỏ nhất (đầu tiên) của 'Chris' được cập nhật. Đây là kỹ thuật thường dùng khi cần cập nhật một hàng đại diện cho một nhóm.