Xác định Và Xóa Các Bản Ghi Trùng Lặp Trong Bảng SQL Server

Skip to content Menu
Open Search

Trùng lặp dữ liệu là 1 vấn đề thường gặp đối với ai hay làm việc với CSDL còn cái việc mà đi dọn dẹp cho đống dữ liệu đó thì ôi thôi, mệt vãi chưởng. Xác định được dữ liệu bị lặp trong hàng nghìn, hàng triệu dòng thì vất vả vãi chưa kể nếu xóa nhầm thì có mà đi toi cả lũ. Mình cũng dặn các bạn là nên backup lại dữ liệu thật kĩ rồi mới tiến hành nhé, mình cũng vài lần cho đi DB của hệ thống nhưng may là cũng phục hồi được chứ không giờ ngồi nhà đá viết bài chứ chẳng chơi J

Còn trong bài này mình xin nêu 3 cách để thực hiện cách xóa các dữ liệu bị trùng lặp ở trong bảng.

Đầu tiên ta tạo ra ít dữ liệu giả nhỉ :3

USE [AdventureWorks]

GO

SELECT TOP 100 ContactID, FirstName, LastName, EmailAddress, Phone

INTO DummyData

FROM Person.Contact

SELECT * FROM DummyData

INSERT INTO DummyData

SELECT TOP 40 PERCENT FirstName, LastName, EmailAddress, Phone

from DummyData

SELECT * FROM DummyData

INSERT INTO DummyData

SELECT TOP 30 PERCENT FirstName, LastName, EmailAddress, Phone

from DummyData

SELECT * FROM DummyData

Cách 1: sử dụng row_number

;WITH dup as (

SELECT ContactID, FirstName, LastName, EmailAddress, Phone,

ROW_NUMBER() OVER(PARTITION BY FirstName, LastName ORDER BY ContactID) AS NumOfDups

FROM DummyData)

SELECT * FROM dup

WHERE NumOfDups > 1

ORDER BY ContactID

— Remove/Delete duplicate records:

;WITH dup as (

SELECT ContactID, FirstName, LastName, EmailAddress, Phone,

ROW_NUMBER() OVER(PARTITION BY FirstName, LastName ORDER BY ContactID) AS NumOfDups

FROM DummyData)

DELETE FROM dup

WHERE NumOfDups > 1

SELECT * FROM DummyData

Cách 2: sử dụng join

SELECT DISTINCT a.ContactID, a.FirstName, a.LastName, a.EmailAddress, a.Phone

FROM DummyData a

JOIN DummyData b

ON a.FirstName = b.FirstName

AND a.LastName = b.LastName

AND a.ContactID > b.ContactID

DELETE a

FROM DummyData a

JOIN DummyData b

ON a.FirstName = b.FirstName

AND a.LastName = b.LastName

AND a.ContactID > b.ContactID

SELECT * FROM DummyData

Cách 3: Sử dụng subquery

SELECT * FROM DummyData

WHERE ContactID NOT IN (SELECT MIN(ContactID)

FROM DummyData

GROUP BY FirstName, LastName)

— Remove/Delete duplicate records:

DELETE FROM DummyData

WHERE ContactID NOT IN (SELECT MIN(ContactID)

FROM DummyData

GROUP BY FirstName, LastName)

SELECT * FROM DummyData

Đặc biệt lưu ý là backup dữ liệu trước khi thực hiện nhé. Đặc biệt lưu ý phát nữa :3

Share this:

  • Tweet
  • More
  • Pocket
Like Loading...

Related

Leave a comment Cancel reply

Δ

Subscribe to Blog via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Email Address:

Subscribe

Join 434 other subscribers Search for:

Categories

  • Agile
  • Automation
  • Books
  • C#
  • du lịch
  • Javascript
  • MVC
  • Office
  • performance
  • POWERSHELL
  • python
  • SQL
  • Tips
  • WCF
  • WPF

Recent Posts

  • Suy nghĩ về hạnh phục
  • Suy nghĩ về hệ thống thông báo
  • Tây Việt – Hành trình ngàn dặm (chốt)
  • Tây Việt – hành trình ngàn dặm ( phần 3)
  • Tây Việt – Hành trình ngàn dặm (phần 2)

Recent Comments

Unknown's avatarAnonymous on Tối ưu hiệu năng SQL (phần 2):…
Chuong's avatarChuong on Tối ưu hiệu năng SQL (phần 6):…
Hihi's avatarHihi on Tối ưu hiệu năng SQL (phần 3):…
Top 11 Bdd Là Gì - V… on Áp dụng BDD cho dự án Agile (p…
vietnh91's avatarvietnh91 on Copy paste và câu chuyện xứ Bắ…

Archives

  • August 2018
  • May 2018
  • April 2018
  • March 2018
  • February 2018
  • January 2018
  • December 2017
  • November 2017
  • October 2017
  • September 2017
  • August 2017
  • July 2017
  • June 2017
  • May 2017
  • April 2017
  • March 2017
  • February 2017
  • January 2017
  • December 2016
  • November 2016
  • October 2016
  • September 2016
  • August 2016
  • July 2016
  • June 2016
  • May 2016
  • April 2016

Chi nhánh

Hồ Tùng Mậu, Hà Nội

Blog Stats

  • 121,962 hits
Search for:

Recent Posts

  • Suy nghĩ về hạnh phục
  • Suy nghĩ về hệ thống thông báo
  • Tây Việt – Hành trình ngàn dặm (chốt)
  • Tây Việt – hành trình ngàn dặm ( phần 3)
  • Tây Việt – Hành trình ngàn dặm (phần 2)

Recent Comments

Unknown's avatarAnonymous on Tối ưu hiệu năng SQL (phần 2):…
Chuong's avatarChuong on Tối ưu hiệu năng SQL (phần 6):…
Hihi's avatarHihi on Tối ưu hiệu năng SQL (phần 3):…
Top 11 Bdd Là Gì - V… on Áp dụng BDD cho dự án Agile (p…
vietnh91's avatarvietnh91 on Copy paste và câu chuyện xứ Bắ…

Archives

  • August 2018
  • May 2018
  • April 2018
  • March 2018
  • February 2018
  • January 2018
  • December 2017
  • November 2017
  • October 2017
  • September 2017
  • August 2017
  • July 2017
  • June 2017
  • May 2017
  • April 2017
  • March 2017
  • February 2017
  • January 2017
  • December 2016
  • November 2016
  • October 2016
  • September 2016
  • August 2016
  • July 2016
  • June 2016
  • May 2016
  • April 2016

Categories

  • Agile
  • Automation
  • Books
  • C#
  • du lịch
  • Javascript
  • MVC
  • Office
  • performance
  • POWERSHELL
  • python
  • SQL
  • Tips
  • WCF
  • WPF

Blog at WordPress.com.

Up ↑

Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use. To find out more, including how to control cookies, see here: Cookie Policy
  • Comment
  • Reblog
  • Subscribe Subscribed
    • Code, code and more code
    • Join 44 other subscribers Sign me up
    • Already have a WordPress.com account? Log in now.
    • Code, code and more code
    • Subscribe Subscribed
    • Sign up
    • Log in
    • Copy shortlink
    • Report this content
    • View post in Reader
    • Manage subscriptions
    • Collapse this bar
%d Design a site like this with WordPress.comGet started

Từ khóa » Xóa Dòng Trùng Trong Sql