2017-02-15 29 views
0

讓我解釋一下我的問題一點點,這是我的表mysql的刪除與相同ID的所有記錄的話還沒說完

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 

因此,這是一個包含事件(如表中的ID 4432只有一個與許多狀態事件)

有了這個在我的腦海,我需要2解決一個問題,

1)我必須刪除所有事件(所有狀態和行在內)不具有狀態Finalizado(成品)

2)我必須刪除所有事件(所有狀態和行在內)有重複的狀態

所以在上面的例子中,我將不得不刪除所有與responseoid = 0224和1824年記錄的問題之一,responseoid = 5585問題二

但考慮到該表有11500000行aprox。

我不在乎是,這是更多鈔票有一個或兩個querys

在此先感謝

+1

它看起來第一個副本需要刪除,然後最後..狀態 –

+0

感謝您的輸入,b我需要知道如何去做。問候 – anguswild

+0

這將是更容易,如果你把這個sql小提琴 –

回答

1

對於第一個任務,嘗試此查詢 -

DELETE t1 
    FROM table t1 
    JOIN (SELECT RESPONSEOID FROM table 
      GROUP BY RESPONSEOID 
      HAVING(COUNT(IF(Statuses = 'Finalizado', 1, null))) = 0 
     ) t2 
    ON t1.RESPONSEOID = t2.RESPONSEOID; 

對於第二個,你應重新填充表格 -

INSERT INTO temp_table SELECT DISTINCT * FROM table; 

如果存在ID字段,將有可能刪除重複項而不重新填充。

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

注意:先在臨時表上試一下,確保一切都比在原表上使用得更準確

+0

您也在做與dani相同的操作,刪除除「final ....」之外的所有內容 –

+0

@ Mohtisham仔細看我得到Finalizado的id,並且不刪除相同的id。所以它不會刪除相同的ID與不同的狀態:) –

0

是的,你可以做到這一點通過查詢

  1. 回答你的第1部分

    delete from table 
    where statuses NOT IN ('Finalizado') 
    
  2. 回答你第二部分是:添加唯一約束到田地它就會刪除所有重複條目:

    ALTER IGNORE TABLE your_table 
        ADD UNIQUE INDEX idx_name (statuees); // you can pass multiple fields name comma-separated 
    
+1

你的第一個查詢也刪除所有ID。從他的例子他需要這個4432 id與所有其他狀態 –