Thứ Ba, 25 tháng 7, 2023

Xóa dữ liệu trùng nhau trong SQL Server

Trong bài này mình sẽ hướng dẫn các bạn cách xóa dữ liệu trùng nhau trong SQL Server. Đây là trường hợp khá phổ biến khi bạn vô tình nhập dữ liệu trùng nhau quá nhiều và muốn xóa chúng ra khỏi table.

Để xóa duplicate dữ liệu thì ta thực hiện ba bước như sau:

  • Tìm các dòng trùng nhau bằng GROUP BY và ROW_NUMBER().
  • Sử dụng lệnh Delete để xóa các row trùng.

Ok, ta sẽ thực hành thông qua một ví dụ cụ thể luôn nhé.

Mục lục

  • 1. Tạo dữ liệu mẫu trùng nhau
  • 2. Xóa dữ liệu trùng nhau từ bảng đã tạo

1. Tạo dữ liệu mẫu trùng nhau

Hãy tạo một table bằng câu lệnh SQL sau:

1
2
3
4
5
6
7
8
DROP TABLE IF EXISTS sales.contacts;
 
CREATE TABLE sales.contacts(
    contact_id INT IDENTITY(1,1) PRIMARY KEY,
    first_name NVARCHAR(100) NOT NULL,
    last_name NVARCHAR(100) NOT NULL,
    email NVARCHAR(255) NOT NULL,
);

Tiếp đến hãy insert vào dòng dữ liệu, trong đó có dữ liệu trùng nhau nhé.

1
2
3
4
5
6
7
8
9
10
11
12
13
INSERT INTO sales.contacts
    (first_name,last_name,email)
VALUES
    ('Syed','Abbas','syed.abbas@example.com'),
    ('Catherine','Abel','catherine.abel@example.com'),
    ('Kim','Abercrombie','kim.abercrombie@example.com'),
    ('Kim','Abercrombie','kim.abercrombie@example.com'),
    ('Kim','Abercrombie','kim.abercrombie@example.com'),
    ('Hazem','Abolrous','hazem.abolrous@example.com'),
    ('Hazem','Abolrous','hazem.abolrous@example.com'),
    ('Humberto','Acevedo','humberto.acevedo@example.com'),
    ('Humberto','Acevedo','humberto.acevedo@example.com'),
    ('Pilar','Ackerman','pilar.ackerman@example.com');

Bây giờ hãy sử dụng lệnh Select để xem tổng thể của table vừa tạo đó.

1
2
3
4
5
6
7
SELECT
   contact_id,
   first_name,
   last_name,
   email
FROM
   sales.contacts;

Kết quả sẽ như hình dưới đây.

SQL Server Delete Duplicates png

Có ba cặp dữ liệu trùng đó là: (3,4,5), (6,7), và (8,9).

2. Xóa dữ liệu trùng nhau từ bảng đã tạo

Trong lệnh này có sử dụng common table expression (CTE), nếu bạn chưa biết nó là gì thì có thể tra google để xem thêm nhé.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
WITH cte AS (
    SELECT
        contact_id,
        first_name,
        last_name,
        email,
        ROW_NUMBER() OVER (
            PARTITION BY
                first_name,
                last_name,
                email
            ORDER BY
                first_name,
                last_name,
                email
        ) row_num
     FROM
        sales.contacts
)
DELETE FROM cte
WHERE row_num > 1;

Chạy câu lệnh này và xem lại trong table thì bạn sẽ thấy các row trùng nhau đã bị xóa.

SQL Server Delete Duplicate Rows Result png

Như vậy, với câu lệnh đơn giản trên là bạn có thể xóa dữ liệu trùng nhau trong SQL Server rồi đấy. Bạn có thể thay đổi tên field và table cho giống với table hiện tại của bạn. Chúc thành công!

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master