首頁 >資料庫 >mysql教程 >如何使用單一查詢刪除SQL Server中基於特定欄位的重複記錄?

如何使用單一查詢刪除SQL Server中基於特定欄位的重複記錄?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-12 12:06:44505瀏覽

How to Delete Duplicate Records in SQL Server Based on a Specific Field Using a Single Query?

基於特定欄位刪除 SQL Server 中的重複記錄

假設有一個名為 "Employee" 的表,其中包含一個名為 "EmployeeName" 的欄位。任務是基於 "EmployeeName" 欄位刪除冗餘記錄,得到以下資料:

EmployeeName
Anand
Anil
Dipak

如何使用 SQL Server 中的 TSQL 透過單一查詢實現此目標?

使用視窗函數的解:

為了解決這個問題,視窗函數是一種可行的方法。視窗函數可讓您對由 OVER 子句定義的分割區內的一組行執行操作。在本例中,分割區由 "EmployeeName" 欄位定義。

以下查詢有效地識別並刪除基於 "EmployeeName" 欄位的重複記錄:

<code class="language-sql">delete x from (
select *, rn=row_number() over (partition by EmployeeName order by empId)
from Employee
) x
where rn > 1;</code>

解釋:

  • 視窗函數 row_number() 用於為每個分割區(由 EmployeeName 定義)中的每筆記錄分配一個數字排名 - 從 1 開始。
  • 然後,delete 語句將目標指向 rn 大於 1 的行,這些行是重複項。

查看已刪除的記錄:

要預覽將被刪除的記錄,而無需實際執行 delete 語句,請使用以下 select 查詢:

<code class="language-sql">select *
from (
select *, rn=row_number() over (partition by EmployeeName order by empId)
from Employee
) x
where rn > 1;</code>

以上是如何使用單一查詢刪除SQL Server中基於特定欄位的重複記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn