Rumah >pangkalan data >tutorial mysql >Bagaimana Mengeluarkan Baris Pendua dengan Cekap dari Jadual Tanpa Pengecam Unik?
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:
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!