Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memadam Baris Pendua dengan Cekap dari Jadual dalam SQL?
SQL: Menghapuskan Baris Pendua dalam Jadual
Cabaran:
Anda berhadapan dengan jadual yang tidak mempunyai kunci utama atau kekangan, mengandungi berbilang baris dengan data yang sama. Matlamatnya adalah untuk mengalih keluar baris pendua, mengekalkan hanya satu contoh bagi setiap baris unik. Kami akan menggunakan lajur bernama "kunci" untuk mengenal pasti pendua, memastikan hanya satu entri wujud untuk setiap nilai "kunci" yang berbeza.
Penyelesaian:
Proses ini melibatkan dua langkah utama:
Arahan SQL berikut mencapai ini:
<code class="language-sql">DELETE FROM dups a USING ( SELECT MIN(ctid) as ctid, key FROM dups GROUP BY key HAVING COUNT(*) > 1 ) b WHERE a.key = b.key AND a.ctid <> b.ctid;</code>
Nota Penting: Kaedah ini tidak menawarkan kawalan ke atas baris tertentu yang dikekalkan.
Contoh Ilustrasi:
Pertimbangkan jadual contoh ini:
<code class="language-sql">CREATE TABLE people ( name varchar(50) NOT NULL, surname varchar(50) NOT NULL, age integer NOT NULL ); INSERT INTO people (name, surname, age) VALUES ('A.', 'Tom', 30), ('A.', 'Tom', 10), ('B.', 'Tom', 20), ('B', 'Chris', 20);</code>
Untuk mencari kejadian pertama pendua:
<code class="language-sql">SELECT MIN(ctid) as ctid, name, surname FROM people GROUP BY (name, surname) HAVING COUNT(*) > 1;</code>
Output:
ctid | name | surname |
---|---|---|
(0,1) | A. | Tom |
Memadamkan pendua bukan pertama:
<code class="language-sql">DELETE FROM people a USING ( SELECT MIN(ctid) as ctid, name, surname FROM people GROUP BY (name, surname) HAVING COUNT(*) > 1 ) b WHERE a.name = b.name AND a.surname = b.surname AND a.ctid <> b.ctid;</code>
Barisan yang tinggal:
<code class="language-sql">SELECT * FROM people;</code>
Output:
name | surname | age |
---|---|---|
A. | Tom | 30 |
B. | Tom | 20 |
B | Chris | 20 |
Atas ialah kandungan terperinci Bagaimana untuk Memadam Baris Pendua dengan Cekap dari Jadual dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!