/ / Cách tìm và xóa các bản sao trong SQL

Cách tìm và xóa các bản sao trong SQL

pexels brett sayles 5480781

Các phương pháp hay nhất về thiết kế cơ sở dữ liệu khuyên bạn nên sử dụng ràng buộc ĐỘC ĐÁO để ngăn trùng lặp trong cơ sở dữ liệu. Tuy nhiên, khi làm việc với cơ sở dữ liệu được thiết kế kém hoặc dữ liệu không sạch, bạn có thể cần tự tìm các bản sao và xóa chúng theo cách thủ công.


Đọc tiếp để tìm hiểu cách tìm các bản sao trong cơ sở dữ liệu SQL và cách xóa chúng.


Tạo cơ sở dữ liệu mẫu

Đối với mục đích trình diễn, hãy tạo một bảng có tên Người dùng với cột tên và điểm bằng cách chạy truy vấn SQL này.

 DROP TABLE IF EXISTS Users;

CREATE TABLE Users (
    pk_id int PRIMARY KEY,
    name VARCHAR (16),
    score INT,
);

Chèn một số giá trị mẫu bằng cách chạy truy vấn này:

 INSERT INTO
    Users(pk_id, name, score)
VALUES
    (1, 'Jane', 20),
    (2, 'John', 13),
    (3, 'Alex', 32),
    (4, 'John', 46),
    (5, 'Jane', 20),
    (6, 'Mary', 34),
    (7, 'Jane', 20),
    (8, 'John', 13)

Lưu ý rằng một số hàng này chứa các giá trị trùng lặp cho cột tên.

Vui lòng kiểm tra các lệnh và truy vấn SQL này nếu bạn cần giải thích sâu hơn về cách thao tác cơ sở dữ liệu bằng SQL.

Sử dụng GROUP BY để tìm các giá trị trùng lặp

Bạn có thể sử dụng câu lệnh GROUP BY để sắp xếp các giá trị đáp ứng các điều kiện nhất định trong cùng một nhóm.

Giả sử các tên trong bảng mẫu phải là duy nhất. Bạn có thể sử dụng GROUP BY để nhóm các hàng có cùng tên.

 SELECT name, COUNT(name)
FROM Users
GROUP BY name
HAVING COUNT(name) > 1

COUNT cho phép bạn chọn các hàng có nhiều người dùng có cùng tên.

Khi bạn chạy truy vấn này, cơ sở dữ liệu sẽ trả về các hàng chứa John và Jane dưới dạng trùng lặp.

Xóa các bản sao khỏi cơ sở dữ liệu

Sau khi tìm thấy các bản sao, bạn có thể muốn xóa chúng bằng cách sử dụng câu lệnh DELETE.

Đối với ví dụ này, hãy chạy truy vấn sau:

 WITH cte AS (
    SELECT *
        ROW_NUMBER() OVER (
            PARTITION BY
                name, score
            ORDER BY
                name, score
        ) R
     FROM
        Users
)

DELETE FROM cte
WHERE R > 1;

Truy vấn này sử dụng một biểu thức CTE để tìm các bản sao và sau đó xóa tất cả chúng trừ một bản sao.

Tại sao bạn nên xóa dữ liệu trùng lặp

Xóa dữ liệu trùng lặp là không cần thiết. Tuy nhiên, nó cho phép bạn giải phóng không gian mà các hàng trùng lặp sử dụng.

Ít hàng hơn cũng có nghĩa là các truy vấn có thể thực thi nhanh hơn nhiều dẫn đến hiệu suất cao hơn. Sử dụng các truy vấn trong hướng dẫn này để giúp bạn tìm và loại bỏ các bản sao khỏi cơ sở dữ liệu SQL.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *