删除重复行mysql不是唯一的

时间:2016-06-18 16:58:56

标签: mysql

我对数据库有一点问题,从xls收取regisrtos并且可以加载两个以上相同的xls生成重复记录,我不能限制它是唯一的因为它们是在几列中重复的记录...我告诉他们

 id|    Fecha  | EquipoA   | EquipoB | Categoria | Cancha   | Hora  | Nr_J1 | Nombre_J1 | Apellido_J1 | Nr_J2 | Nombre_J2 | Apellido_J2
 1 |Sáb 09 Abr | San Juan  | Edu     | sub18     | San Juan | 15:00 | 39    | A.        | Aunchayna   | 95    | S.        | Villizio 
 2 |Sáb 09 Abr | San Juan  | Impulso | sub16     | San Juan | 16:30 | 39    | A.        | Aunchayna   | 95    | S.        | Villizio 
 3 |Sáb 09 Abr | San Juan A| ISASA   | sub16     | San Juan | 18:00 | 39    | A.        | Aunchayna   | 95    | S.        | Villizio 
 4 |Sáb 09 Abr | San Juan  | ISASA   | sub14     | San Juan | 19:30 | 39    | A.        | Aunchayna   | 95    | S.        | Villizio 
 5 |Sáb 09 Abr | San Juan  | Edu     | sub18     | San Juan | 15:00 | 39    | A.        | Aunchayna   | 95    | S.        | Villizio 

这是一个示例寄存器1等于5 在所有列中,但其他在EquipoA或EquipoB或Hora中有所不同...... 所以我不能让它们变得独一无二

我需要在这种情况下清除日志重复5并离开1 我不是MySql的专家,我很难找到正确的查询

3 个答案:

答案 0 :(得分:0)

似乎所有你需要的是SELECT DISTINCT:

PATH

答案 1 :(得分:0)

这将删除完全重复的内容(id列除外):

delete t1
from Table1 t1
join Table1 t2 using (
  `Fecha`,
  `EquipoA`,
  `EquipoB`,
  `Categoria`,
  `Cancha`,
  `Hora`,
  `Nr_J1`,
  `Nombre_J1`,
  `Apellido_J1`,
  `Nr_J2`,
  `Nombre_J2`,
  `Apellido_J2`
)
where t1.id > t2.id

Demo

答案 2 :(得分:0)

很容易删除所有重复。您可以在所有必须不同的字段上添加带 IGNORE 的唯一INDEX:

ALTER IGNORE TABLE yourTable
 ADD UNIQUE KEY idx_dup 
 ( Fecha, EquipoA, EquipoB, Categoria, Cancha, Hora, 
 Nr_J1, Nombre_J1, Apellido_J1, Nr_J2, Nombre_J2, Apellido_J);

先保存你的桌子。

<强>样品

MariaDB [your_schema]> select * from orders;
+----------+------------+-------------+-----------+---------+
| order_id | order_date | order_total | client_id | ship_id |
+----------+------------+-------------+-----------+---------+
|        1 | 2016-03-12 |       10.00 |         1 |       1 |
|        2 | 2016-03-14 |       20.00 |         1 |       2 |
|        3 | 2016-04-13 |       30.00 |         1 |       2 |
|        9 | 2016-05-20 |       10.00 |         2 |       1 |
|       10 | 2016-06-03 |       20.00 |         2 |       2 |
|       11 | 2016-03-12 |       10.00 |         1 |       1 |
+----------+------------+-------------+-----------+---------+
6 rows in set (0.00 sec)

MariaDB [your_schema]> ALTER IGNORE TABLE orders ADD UNIQUE KEY dup (order_date,order_total,client_id,ship_id);
Query OK, 6 rows affected (0.29 sec)
Records: 6  Duplicates: 1  Warnings: 0

MariaDB [your_schema]> select * from orders;
+----------+------------+-------------+-----------+---------+
| order_id | order_date | order_total | client_id | ship_id |
+----------+------------+-------------+-----------+---------+
|        1 | 2016-03-12 |       10.00 |         1 |       1 |
|        2 | 2016-03-14 |       20.00 |         1 |       2 |
|        3 | 2016-04-13 |       30.00 |         1 |       2 |
|        9 | 2016-05-20 |       10.00 |         2 |       1 |
|       10 | 2016-06-03 |       20.00 |         2 |       2 |
+----------+------------+-------------+-----------+---------+
5 rows in set (0.00 sec)

MariaDB [your_schema]>