Mengalih Keluar Baris Pendua dalam Pelayan SQL dengan Cekap: Pendekatan CTE
Apabila berurusan dengan jadual SQL Server yang tidak mempunyai kunci unik, menghapuskan baris pendua memerlukan pendekatan strategik. Ini boleh dicapai dengan berkesan menggunakan ungkapan jadual biasa (CTE) bersama-sama dengan fungsi ROW_NUMBER()
.
Inilah penyelesaian yang menunjukkan teknik ini:
WITH RowNumberedRows AS ( SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7], RN = ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) FROM dbo.Table1 ) DELETE FROM RowNumberedRows WHERE RN > 1;
Penjelasan Terperinci:
CTE, dinamakan dengan tepat RowNumberedRows
, memberikan nombor baris unik (RN
) kepada setiap baris dalam jadual. Fungsi ROW_NUMBER()
membahagikan baris berdasarkan lajur col1
, memberikan nombor berjujukan dalam setiap partition. Ini memastikan kejadian pertama setiap kumpulan pendua menerima RN
1.
Pernyataan DELETE
kemudian menyasarkan CTE, mengalih keluar semua baris dengan RN
lebih besar daripada 1. Ini hanya meninggalkan baris pertama setiap set pendua, dengan berkesan mengalih keluar pendua.
Contoh:
Menggunakan pertanyaan ini untuk sampel data menghasilkan hasil berikut:
COL1 | COL2 | COL3 | COL4 | COL5 | COL6 | COL7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
Perhatikan bahawa baris "john" pendua telah berjaya dihapuskan.
Kebolehsuaian kaedah ini patut diberi perhatian. Dengan melaraskan lajur pembahagian dalam fungsi ROW_NUMBER()
(cth., PARTITION BY col1, col2
), anda boleh menentukan keunikan berdasarkan berbilang lajur seperti yang diperlukan.
Atas ialah kandungan terperinci Bagaimana untuk Memadam Baris Pendua dalam Pelayan SQL Tanpa Kunci Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!