Giới thiệu
Kết hợp CASE WHEN EXISTS (subquery) THEN ... ELSE ... END để trả về nhãn 'Present'/'Not Present' dựa trên việc bản ghi có tồn tại hay không.
Ví dụ minh họa
Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (UserId INT, UserName VARCHAR(100));
mysql> INSERT INTO DemoTable VALUES (100, 'Chris'), (101, 'Robert'), (102, 'David'), (103, 'Mike');
Truy vấn CASE WHEN EXISTS
mysql> SELECT CASE
WHEN EXISTS (SELECT * FROM DemoTable WHERE UserId = 102)
THEN 'Present' ELSE 'Not Present' END AS Result;
Kết quả
+---------+ | Result | +---------+ | Present | +---------+
Giải thích
EXISTS (subquery): Trả về TRUE nếu subquery trả về ≥ 1 dòng. Rất nhanh (dừng ngay khi tìm thấy 1 dòng).CASE WHEN ... THEN ... ELSE ... END: Biểu thức điều kiện trả về giá trị.- Khác với
IN: EXISTS thường nhanh hơn với subquery phức tạp, và xử lý NULL an toàn hơn.
Các biến thể
Trả về 1/0 thay vì chuỗi
SELECT CASE WHEN EXISTS(...) THEN 1 ELSE 0 END AS exists_flag;
Sử dụng trong SELECT danh sách cột
SELECT UserId, UserName,
CASE WHEN EXISTS (SELECT 1 FROM DemoTable d2 WHERE d2.UserId = d1.UserId AND d2.UserName = 'Admin')
THEN 'Admin' ELSE 'User' END AS Role
FROM DemoTable d1;
Trong WHERE
SELECT * FROM DemoTable WHERE EXISTS (SELECT 1 FROM other_table WHERE other_table.id = DemoTable.UserId);