Mặc định DISTINCT trong MySQL phân biệt chữ hoa/thường (case-sensitive tùy collation). Để distinct case-insensitive, áp dụng UPPER() hoặc LOWER() trước khi distinct.
Cú pháp
-- Cách 1: UPPER SELECT DISTINCT UPPER(ten_cot) FROM ten_bang; -- Cách 2: LOWER SELECT DISTINCT LOWER(ten_cot) FROM ten_bang;
Ví dụ minh họa
Tạo bảng email (có trùng lặp khác case):
mysql> CREATE TABLE DistinctKhongPhanBietCase (
-> Id INT NOT NULL AUTO_INCREMENT,
-> Email VARCHAR(30),
-> MatKhau VARCHAR(10),
-> PRIMARY KEY(Id)
-> );
Chèn dữ liệu:
mysql> INSERT INTO DistinctKhongPhanBietCase(Email, MatKhau) VALUES
-> ('John@gmail.com', 'john123'),
-> ('john@gmail.com', '654321'),
-> ('Mike@gmail.com', '999999'),
-> ('mike@gmail.com', '334556'),
-> ('Carol@gmail.com', '1010101'),
-> ('Larry@gmail.com', '12345678');
Case 1: DISTINCT UPPER()
mysql> SELECT DISTINCT UPPER(Email) FROM DistinctKhongPhanBietCase;
+--------------------+ | UPPER(Email) | +--------------------+ | JOHN@GMAIL.COM | | MIKE@GMAIL.COM | | CAROL@GMAIL.COM | | LARRY@GMAIL.COM | +--------------------+
Case 2: DISTINCT LOWER()
mysql> SELECT DISTINCT LOWER(Email) FROM DistinctKhongPhanBietCase;
+--------------------+ | LOWER(Email) | +--------------------+ | john@gmail.com | | mike@gmail.com | | carol@gmail.com | | larry@gmail.com | +--------------------+
Lưu ý: Kết quả trả về đã được chuẩn hóa case. Nếu cần giữ nguyên case gốc của bản ghi đầu tiên, dùng GROUP BY LOWER(cot) kết hợp MIN(cot) hoặc ANY_VALUE(cot) (MySQL 5.7+).