Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hapus duplikat hanya menggunakan kueri MySQL?

Pertimbangkan kasus uji berikut:

CREATE TABLE mytb (url_id int, url_addr varchar(100));

INSERT INTO mytb VALUES (1, 'www.google.com');
INSERT INTO mytb VALUES (2, 'www.microsoft.com');
INSERT INTO mytb VALUES (3, 'www.apple.com');
INSERT INTO mytb VALUES (4, 'www.google.com');
INSERT INTO mytb VALUES (5, 'www.cnn.com');
INSERT INTO mytb VALUES (6, 'www.apple.com');

Di mana tabel pengujian kami sekarang berisi:

SELECT * FROM mytb;
+--------+-------------------+
| url_id | url_addr          |
+--------+-------------------+
|      1 | www.google.com    |
|      2 | www.microsoft.com |
|      3 | www.apple.com     |
|      4 | www.google.com    |
|      5 | www.cnn.com       |
|      6 | www.apple.com     |
+--------+-------------------+
5 rows in set (0.00 sec)

Kemudian kita dapat menggunakan beberapa tabel DELETE sintaks sebagai berikut:

DELETE t2
FROM   mytb t1
JOIN   mytb t2 ON (t2.url_addr = t1.url_addr AND t2.url_id > t1.url_id);

... yang akan menghapus entri duplikat, hanya menyisakan url pertama berdasarkan url_id :

SELECT * FROM mytb;
+--------+-------------------+
| url_id | url_addr          |
+--------+-------------------+
|      1 | www.google.com    |
|      2 | www.microsoft.com |
|      3 | www.apple.com     |
|      5 | www.cnn.com       |
+--------+-------------------+
3 rows in set (0.00 sec)

PERBARUI - Lanjut ke komentar baru di atas:

Jika URL duplikat tidak memiliki format yang sama, Anda mungkin ingin menerapkan REPLACE() berfungsi untuk menghapus www. atau http:// bagian. Misalnya:

DELETE t2
FROM   mytb t1
JOIN   mytb t2 ON (REPLACE(t2.url_addr, 'www.', '') = 
                   REPLACE(t1.url_addr, 'www.', '') AND 
                   t2.url_id > t1.url_id);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nilai default tidak valid untuk 'dateAdded'

  2. Perbaiki "ERROR 1136 (21S01):Jumlah kolom tidak cocok dengan jumlah nilai pada baris 2" saat menggunakan Pernyataan VALUES di MySQL

  3. MySQL Pilih Baris N Teratas

  4. Saya tidak dapat menggunakan fungsi mysql_* setelah memutakhirkan PHP

  5. Bagaimana cara MySQL memproses ORDER BY dan LIMIT dalam kueri?