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

MySQL Премахване на дублиращи се записи

Понякога може да се наложи да премахнете дублиращи се записи или да изтриете дублиращи се редове в MySQL. Има основно 3 начина за изтриване на дублиращи се записи в MySQL. Ето как да премахнете дублиращи се записи в MySQL.

MySQL Премахване на дублиращи се записи

Ето стъпките за премахване на дублиращи се записи в MySQL. Да приемем, че имате следната таблица dup_orders(id, amount) с дублиращи се записи.

mysql> create table dup_orders(id int, amount int);

mysql> insert into dup_orders(id,amount) values(1, 100),(1,250),(2,350),(2,350);

mysql> select * from dup_orders;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    1 |    250 |
|    2 |    350 |
|    2 |    350 |
+------+--------+

Бонус за четене:Как да получите дублирани записи в MySQL

Как да изтрия дублиращи се редове в MySQL

Нека разгледаме всеки от 3-те начина за изтриване на дублиращи се записи в MySQL.

1. Премахнете дублиращи се записи с помощта на междинна таблица

Този метод включва 3 стъпки. Първо изберете редове без дубликати от dup_orders таблица и ги поставете в друга таблица. Ето синтаксиса за него.

CREATE TABLE [copy_of_source] SELECT DISTINCT [columns] FROM [source_table];

Ето нашата заявка за избор на отделни редове от dup_orders в друга таблица.

mysql> CREATE TABLE dup_orders_copy SELECT DISTINCT id,amount FROM dup_orders;

mysql> select * from dup_orders_copy;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    1 |    250 |
|    2 |    350 |
+------+--------+

Горната заявка премахва редове, които завършват дублирани, тоест дублиращи се стойности за всички колони.

Ако искате да премахнете редове с дублиращи се стойности само за една или повече, но не за всички колони, можете да използвате клауза GROUP BY в горната заявка. Например, ако искате само редове с дублиращи се стойности на колона с идентификатор във вашата таблица, използвайте следната заявка.

mysql> CREATE TABLE dup_orders_copy SELECT id,amount FROM dup_orders group by id;

mysql> select * from dup_orders_copy;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    2 |    350 |
+------+--------+

След като създадете междинната таблица, пуснете оригиналната таблица.

mysql> drop table dup_orders;

Накрая преименувайте междинната таблица в оригиналната.

mysql> alter table dup_orders_copy rename to dup_orders;

mysql> select * from dup_orders;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    2 |    350 |
+------+--------+

Бонус четене:MySQL Добавяне на уникална константа

2. Премахнете дублиращи се редове с помощта на INNER JOIN

Можете също да премахнете дублиращи се редове, като използвате комбинация от изрази DELETE и INNER JOIN. В този случай обаче вашата таблица трябва да има поне една уникална колона (напр. първичен ключ). Да приемем, че имате следните dup_orders таблица с дублирана сума стойности, но уникален идентификатор стойности.

mysql> insert into dup_orders(id,amount) values(1, 100),(2,250),(3,350),(4,350);

mysql> select * from dup_orders;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    2 |    250 |
|    3 |    350 |
|    4 |    350 |
+------+--------+

Можете да присъедините горната таблица със себе си, като използвате INNER JOIN и да изтриете дублиращи се редове, като използвате следната заявка.

mysql> DELETE t1 FROM dup_orders t1
       INNER JOIN dup_orders t2
       WHERE
           t1.id < t2.id 
           AND t1.amount = t2.amount;
+------+--------+
| id   | amount |
+------+--------+
|    1 |    100 |
|    2 |    250 |
|    4 |    350 |
+------+--------+

Горната заявка ще запази най-високия идентификатор на ред за всеки дублиран ред. Ако искате да запазите реда с най-нисък идентификатор, използвайте следната заявка.

mysql> DELETE t1 FROM dup_orders t1
       INNER JOIN dup_orders t2
       WHERE
           t1.id >> t2.id 
           AND t1.amount = t2.amount;

Бонус четене:MySQL Преименуване на колона

3. Премахнете дублиращи се записи с помощта на ROW_NUMBER()

Можете също да премахнете дублиращи се записи от таблицата с помощта на функцията ROW_NUMBER(), налична от 8.0.2. Ето SQL заявката за получаване на номера на редове на дублиращи се редове

SELECT *. ROW_NUMBER () Over (PARTITION BY [column] 
ORDER BY [column]) as [row_number_name];

Ето заявката за получаване на номер на ред за таблица dup_orders

SELECT *. ROW_NUMBER () Over (PARTITION BY id ORDER BY id) 
as row_number from dup_orders;

Ще използваме това като подзаявка в нашата SQL заявка за изтриване на дублиращи се редове, както е показано по-долу

DELETE FROM dup_orders
WHERE id IN (
    SELECT id
    FROM (
        SELECT 
            id, 
            ROW_NUMBER () Over (PARTITION BY id ORDER BY id) as row_number 
           from dup_orders
    ) t
    WHERE row_number > 1
)

Надяваме се, че сега можете лесно да премахнете дублиращи се записи в MySQL.

Ubiq улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте днес!

  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

  2. mysql изберете от n последни реда

  3. Заобикаляне на MySQL Грешка не може да се отвори отново

  4. Как да намеря най-голямата таблица в MySQL база данни?

  5. Първични ключове на MySQL