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

Làm thế nào để tìm các hàng trùng lặp trong SQL?

Vấn đề:

Bạn có các hàng trùng lặp trong bảng của mình, chỉ có các ID là duy nhất. Làm cách nào để bạn tìm thấy những mục trùng lặp đó?

Ví dụ:

Cơ sở dữ liệu của chúng tôi có một bảng tên là product với dữ liệu trong các cột sau:id , namecategory .

id tên loại
1 bít tết thịt
2 bánh kẹo
3 d> bít tết thịt
4 thịt lợn thịt
5 bánh kẹo
6 bánh kẹo

Hãy tìm các tên và danh mục sản phẩm trùng lặp. Bạn có thể tìm thấy các bản sao bằng cách nhóm các hàng, sử dụng COUNT hàm tổng hợp và chỉ định một HAVING mệnh đề để lọc các hàng.

Giải pháp:

SELECT  name,
 category,
FROM product
GROUP BY name, category
HAVING COUNT(id) >1;

Truy vấn này chỉ trả về các bản ghi trùng lặp — những bản ghi có cùng tên sản phẩm và danh mục:

name loại
bít tết thịt
bánh đồ ngọt

Có hai sản phẩm trùng lặp trong bảng của chúng tôi:bít tết từ danh mục thịt và bánh ngọt từ danh mục đồ ngọt. Sản phẩm đầu tiên được lặp lại hai lần trong bảng, trong khi sản phẩm thứ hai xuất hiện ba lần.

Thảo luận:

Để chọn các giá trị trùng lặp, bạn cần tạo các nhóm hàng có cùng giá trị và sau đó chọn các nhóm có số lượng lớn hơn một. Bạn có thể đạt được điều đó bằng cách sử dụng GROUP BY và một HAVING mệnh đề.

Bước đầu tiên là tạo các nhóm bản ghi có cùng giá trị trong tất cả các cột không phải ID (trong ví dụ của chúng tôi là namecategory ). Bạn thực hiện việc này với GROUP BY mệnh đề. Sau GROUP BY từ khóa, bạn đặt tên của các cột bạn muốn sử dụng để nhóm. Chúng tôi loại trừ id vì đó là khóa chính của bảng của chúng tôi; theo định nghĩa, mỗi hàng sẽ có một giá trị khác nhau dưới cột đó. Nếu chúng tôi bao gồm nó, thì chúng tôi sẽ không thể phát hiện ra các bản sao!

Chúng tôi muốn tìm các nhóm có nhiều hơn một hàng; các nhóm như vậy phải chứa một bản sao theo định nghĩa, miễn là chúng tôi đã nhóm trên các cột chính xác. Để thực hiện việc này, chúng tôi sử dụng HAVING mệnh đề. Điều kiện chúng tôi chỉ định là số phần tử trong nhóm— COUNT(id) —Phải lớn hơn một:COUNT(id) > 1 . Hãy nhớ rằng HAVING cho phép bạn lọc các nhóm; WHERE là để lọc các hàng riêng lẻ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ODBC 4.0

  2. Giám sát Nhật ký Giao dịch

  3. Cách không hiển thị trùng lặp trong SQL

  4. Gửi dữ liệu SentryOne tới Máy tính DTU của Cơ sở dữ liệu Azure SQL

  5. Cách tạo bảng cơ sở dữ liệu bằng SQL