Để tìm và hiển thị các bản ghi có ID xuất hiện duy nhất 1 lần (không trùng lặp), dùng subquery GROUP BY ... HAVING COUNT(*) < 2 kết hợp IN.
Ví dụ minh họa
Tạo bảng:
mysql> create table DemoTable (
Id int,
ColorName varchar(100)
);
Chèn dữ liệu (Id 100 lặp 3 lần, 101 lặp 2 lần, 102 chỉ 1 lần):
mysql> insert into DemoTable values(100,'Red'); mysql> insert into DemoTable values(101,'Green'); mysql> insert into DemoTable values(101,'Blue'); mysql> insert into DemoTable values(102,'Yellow'); mysql> insert into DemoTable values(100,'Purple'); mysql> insert into DemoTable values(100,'Black');
Hiển thị dữ liệu:
mysql> select * from DemoTable;
Kết quả:
+------+-----------+ | Id | ColorName | +------+-----------+ | 100 | Red | | 101 | Green | | 101 | Blue | | 102 | Yellow | | 100 | Purple | | 100 | Black | +------+-----------+
Truy vấn lấy hàng có Id không trùng (xuất hiện 1 lần)
mysql> select * from DemoTable where Id in (select Id from DemoTable group by Id having count(*) < 2);
Kết quả:
+------+-----------+ | Id | ColorName | +------+-----------+ | 102 | Yellow | +------+-----------+
Giải thích:
- Subquery:
GROUP BY Id HAVING COUNT(*) < 2→ chỉ giữ Id có count = 1 → chỉ Id 102 - Truy vấn chính:
WHERE Id IN (...)→ lấy toàn bộ cột của hàng Id=102
Cách khác (MySQL 8.0+): Window function COUNT(*) OVER (PARTITION BY Id) as cnt rồi lọc WHERE cnt = 1.
Ứng dụng: Tìm đơn hàng duy nhất, user chỉ có 1 giao dịch, sản phẩm bán chạy duy nhất, v.v.