Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Cách loại bỏ các hàng trùng lặp trong SQL

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 , coloryear_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à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 màu xanh lam chỉ xuất hiện một lần trong tập kết quả này, mặc dù nó xuất hiện hai lần trong bảng gốc. Điều này là do chúng tôi đã chỉ định rằng chúng tôi muốn chỉ chọn những hàng mà sự kết hợp tên-màu là duy nhất.

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mẹo quản lý sao lưu cho TimescaleDB

  2. Kết nối các ứng dụng ODBC trên Windows với QuickBooks Online

  3. Mô hình dữ liệu chăm sóc thú cưng

  4. Poker, Blackjack, Belot và Préférence có liên quan gì với Cơ sở dữ liệu?

  5. Kiểm tra các tuyên bố DML cho OLTP trong bộ nhớ