Giới thiệu
Khi cột trạng thái được định nghĩa kiểu ENUM('Active', 'Inactive'), bạn có thể lọc trực tiếp bằng giá trị chuỗi trong mệnh đề WHERE. Kết hợp GROUP BY để lấy các ID duy nhất có trạng thái Active.
Ví dụ minh họa
Bước 1: Tạo bảng với cột ENUM
CREATE TABLE DemoTable2037 (
StudentId INT,
status ENUM('Active', 'Inactive')
);
Bước 2: Chèn dữ liệu (có trùng lặp StudentId)
INSERT INTO DemoTable2037 VALUES
(99, 'Active'), (99, 'Inactive'), (100, 'Inactive'),
(99, 'Active'), (100, 'Inactive'), (101, 'Active'), (101, 'Active');
Bước 3: Lọc StudentId có trạng thái Active (duy nhất)
SELECT StudentId, status
FROM DemoTable2037
WHERE status = 'Active'
GROUP BY StudentId;
Kết quả:
+-----------+--------+
| StudentId | status |
+-----------+--------+
| 99 | Active |
| 101 | Active |
+-----------+--------+
Lưu ý: GROUP BY StudentId ở đây hoạt động vì MySQL (chế độ mặc định không bật ONLY_FULL_GROUP_BY) cho phép chọn cột status không nằm trong GROUP BY và không có hàm tổng hợp. Để chuẩn SQL, hãy dùng MAX(status) hoặc ANY_VALUE(status).