Vấn đề:
Bạn muốn loại bỏ bất kỳ hàng trùng lặp nào khỏi tập hợp kết quả của một truy vấn để mỗi hàng chỉ xuất hiện một lần.
Ví dụ:
Cơ sở dữ liệu của chúng tôi có một bảng tên là clothes
với dữ liệu trong các cột sau:id
, name
, color
và year_produced
.
id | tên | màu | year_produced |
---|---|---|---|
1 | áo phông | màu vàng | 2015 |
2 | áo khoác | lam | 2016 |
3 | quần jean | đen | 2015 |
4 | áo khoác | lam | 2015 |
5 | áo khoác | xanh | 2016 |
6 | áo khoác | màu vàng | 2017 |
7 | mũ | màu vàng | 2017 |
Hãy lấy tên và màu sắc không lặp lại của quần áo được sản xuất trước năm 2017.
Giải pháp:
SELECT DISTINCT name, color FROM clothes WHERE year_produced < 2017;
Đây là kết quả:
name | màu |
---|---|
áo phông | màu vàng |
áo khoác | lam |
quần jean | đen |
áo khoác | xanh |
Lưu ý rằng
Thảo luận:
Chỉ cần sử dụng DISTINCT
từ khóa sau SELECT
nếu bạn chỉ muốn chọn các hàng không lặp lại. Từ khóa này buộc truy vấn loại bỏ bất kỳ hàng trùng lặp nào, chỉ dựa trên các cột bạn đã liệt kê.
Dưới đây là một ví dụ về việc chỉ chọn các hàng mà tên của mặt hàng là duy nhất:
SELECT DISTINCT name FROM clothes WHERE year_produced < 2017;
Không giống như truy vấn trước, truy vấn này chỉ trả về ba bản ghi:
name | |
---|---|
áo phông | |
quần jean | |
Mặc dù có bốn chiếc quần jean trong bảng gốc (hai màu xanh lam, một màu xanh lá cây và một màu vàng), mục này chỉ xuất hiện một lần trong tập hợp kết quả này nhờ vào DISTINCT
từ khóa.