Rumah >pangkalan data >tutorial mysql >Bagaimana Mengeluarkan Baris Pendua dengan Cekap dari Jadual Tanpa Pengecam Unik?

Bagaimana Mengeluarkan Baris Pendua dengan Cekap dari Jadual Tanpa Pengecam Unik?

Susan Sarandon
Susan Sarandonasal
2025-01-23 01:41:08603semak imbas

How to Efficiently Remove Duplicate Rows from a Table Without Unique Identifiers?

Alih keluar baris pendua dengan cekap tanpa pengecam unik

Mengalih keluar pendua boleh menjadi satu cabaran apabila jadual data tidak mempunyai pengecam baris yang unik. Artikel ini menyediakan penyelesaian yang cekap untuk mengalih keluar baris pendua sambil mengekalkan kejadian pertama baris tersebut.

Mari kita lihat jadual dengan baris pendua:

col1 col2 col3 col4 col5 col6 col7
john 1 1 1 1 1 1
john 1 1 1 1 1 1
sally 2 2 2 2 2 2
sally 2 2 2 2 2 2

Hasil yang diingini selepas mengalih keluar baris pendua ialah:

col1 col2 col3 col4 col5 col6 col7
john 1 1 1 1 1 1
sally 2 2 2 2 2 2

Penyelesaian menggunakan CTE dan ROW_NUMBER

Kaedah ini menggunakan ungkapan jadual biasa (CTE) dan fungsi ROW_NUMBER(). CTE memberikan setiap baris nombor jujukan (RN) berdasarkan susunan tertentu, membolehkan kami mengenal pasti dan menghapuskan pendua.

Berikut ialah pertanyaan SQL dengan arahan langkah demi langkah:

<code class="language-sql">WITH CTE AS (
   SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7],
       RN = ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) -- 为 col1 定义的每个组内分配序列号
   FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1; -- 删除 RN 大于 1 的行(表示重复项)</code>

Arahan:

  • Penciptaan CTE: Penyataan WITH mencipta CTE bernama CTE yang mengandungi lajur jadual dan memberikan nilai RN kepada setiap baris menggunakan fungsi ROW_NUMBER(). Klausa PARTITION BY mengelompokkan baris berdasarkan lajur col1 dan mengisihnya dalam setiap kumpulan untuk menentukan susunan.
  • Fungsi ROW_NUMBER(): Fungsi ROW_NUMBER() menjana jujukan integer bermula dari 1 untuk setiap baris dalam setiap partition yang ditakrifkan oleh klausa PARTITION BY.
  • Kendalian padam: Pernyataan DELETE memadamkan baris dengan RN lebih besar daripada 1 dalam CTE, dengan itu menghapuskan baris pendua.

Output:

Selepas melaksanakan pertanyaan, jadual yang dikemas kini akan mengandungi:

col1 col2 col3 col4 col5 col6 col7
john 1 1 1 1 1 1
sally 2 2 2 2 2 2

Atas ialah kandungan terperinci Bagaimana Mengeluarkan Baris Pendua dengan Cekap dari Jadual Tanpa Pengecam Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn