让我解释一下我的问题,这是我的表
Statuses | RESPONSEOID
Solicita Despacho 4432
Despachado 4432
En Camino 4432
En el Lugar 4432
Terminado 4432
Finalizado 4432
Solicita Despacho 0224
Despachado 0224
En el Lugar 0224
Solicita Despacho 5585
Despachado 5585
En Camino 5585
En el Lugar 5585
En el Lugar 5585
Terminado 5585
Finalizado 5585
Solicita Despacho 1824
Despachado 1824
En Camino 1824
En el Lugar 1824
Solicita Despacho 4688
Terminado 4688
Finalizado 4688
Solicita Despacho 1430
Despachado 1430
Terminado 1430
Finalizado 1430
所以这是一个包含EVENTS的表(例如,ID 4432只是一个具有许多状态的事件)
在我的脑海里,我需要解决2个问题,
1)我必须删除没有状态Finalizado(已完成)的所有事件(包括所有状态和行)
2)我必须删除具有重复状态的所有事件(包括所有状态和行)
所以在上面的例子中,我将不得不删除所有记录,其中responseoid = 0224和1824表示问题一,而responseoid = 5585表示问题二
但请考虑该表有11500000行aprox。
我不在乎这是一个或两个查询的可能性
提前致谢
答案 0 :(得分:1)
对于第一项任务,请尝试此查询 -
INSERT INTO temp_table SELECT DISTINCT * FROM table;
对于第二个,你应该重新填充表 -
\n
如果有ID字段,则可以删除重复项而无需重新填充。
答案 1 :(得分:1)
1)您需要提供具有Finalizado值的第一个ID列表,并使用 NOT IN 删除其他ID
delete from tableName where RESPONSEOID NOT IN (select a.ids from
(select RESPONSEOID as ids from tableName where Statuses='Finalizado'
) a)
2)删除重复的
ALTER IGNORE TABLE table_name
ADD UNIQUE INDEX all_columns_uq
(RESPONSEOID, Statuses) ;
注意:首先在临时表上尝试这一点,确保所有内容都比在原始表上使用正确
答案 2 :(得分:0)
是的,您可以通过查询
来完成回答你的第一部分
delete from table
where statuses NOT IN ('Finalizado')
回答你的第二部分是:为字段添加唯一约束,它将删除所有重复的条目,如:
ALTER IGNORE TABLE your_table
ADD UNIQUE INDEX idx_name (statuees); // you can pass multiple fields name comma-separated
答案 3 :(得分:0)
保留最高ID:
DELETE t1 FROM `users` t1, `users` t2 WHERE t1.id < t2.id AND t1.name = t2.name
保持最低ID:
DELETE t1 FROM `users` t1, `users` t2 WHERE t1.id > t2.id AND t1.name = t2.name