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

Dùng CASE WHEN EXISTS kiểm tra sự tồn tại bản ghi trong MySQL


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);