Header Ads Widget

Tìm dữ liệu bị trùng lặp trong câu lệnh SQL

Dữ liệu lặp lại (duplicate) thường gặp khi sử dụng 1 trường dữ liệu nào đó là khóa

Truy vấn tìm kiếm

Sử dụng câu lệnh truy vẫn MySql
SELECT * , COUNT(*) AS number_record
FROM users
GROUP BY name
HAVING number_record > 1

Hiển thị các dữ liệu trùng nhau

Hiện thị đầy đủ các bản ghi trùng lặp
SELECT * FROM users WHERE name IN (
SELECT name
FROM users
GROUP BY name
HAVING COUNT(name) > 1
)
ORDER BY name

Tìm những record trùng nhau trong MySQL

Check trùng 2 trường thông tin

Check 2 trường thông tin giống nhau và số lần xuất hiện
select su.id, t.* 
from shop_user su
join (
    select shop_id, user_id, count(*) as qty
    from shop_user
    group by shop_id, user_id
    having count(*) > 1
) t on su.shop_id = t.shop_id and su.user_id = t.user_id

Xóa các dữ liệu trùng nhau (giữ lại 1 record)

Câu lệnh dưới đây sẽ xóa những record trùng nhau nhưng giữ lại 1 record trong số đó. Giả sử trong Database có 3 record trùng nhau thì câu lệnh sẽ xóa 2 record và giữ lại 1 record. 
DELETE n1
FROM users n1, users n2
WHERE n1.name = n2.name AND n1.id > n2.id


Xóa những record trùng nhau trong MySQL

Hoặc dùng Select WHERE IN với ngày tạo trùng nhau:

DELETE FROM users WHERE id IN (SELECT id
FROM users 
GROUP BY created_at
HAVING COUNT(id) > 1)

Xóa hoàn toàn các dữ liệu trùng nhau ra khỏi Database

Xoá tất cả những bản ghi trùng nhau
DELETE FROM users
USING users, users AS virtual_users
WHERE (NOT users.id = virtual_users.id) AND (users.name = virtual_users.name)


Xóa những record trùng nhau trong MySQL

Nhận xét