Mysql
 sql >> база данни >  >> RDS >> Mysql

Премахване на дубликати, използвайки само MySQL заявка?

Помислете за следния тестов случай:

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');

Къде сега нашата тестова таблица съдържа:

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)

След това можем да използваме множествената таблица DELETE синтаксис, както следва:

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

... което ще изтрие дублиращи се записи, оставяйки само първия URL адрес въз основа на 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)

АКТУАЛИЗИРАНЕ - В допълнение към новите коментари по-горе:

Ако дублиращите се URL адреси няма да имат същия формат, може да искате да приложите REPLACE() функция за премахване на www. или http:// части. Например:

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. Създаване на визуална база данни с MySQL Workbench

  2. Как да съхранявате името на файла в базата данни, с друга информация, докато качвате изображение на сървър с помощта на PHP?

  3. неуспешно търсене в пълен текст на mysql

  4. Ограничение за предотвратяване на вмъкването на празен низ в MySQL

  5. MySQL – Как да махна таблица, ако съществува в базата данни?