2012-12-31 35 views
1

避免在表中重複記錄Updatting表通過運行查詢,以防止重複記錄

我有一個表像一個下面

CREATE TABLE models(model_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
         model_no varchar(255));        

INSERT INTO models(model_no) 
       VALUES('M24'), 
         ('M22'), 
         ('M25'), 
         ('M24'), 
         ('M24'),    
         ('M35'), 
         ('M15'), 
         ('M18'), 
         ('M25'), 
         ('M15'), 
         ('M15'), 
         ('M17'), 
         ('M19'), 
         ('M29'), 
         ('M29'), 
         ('M12'), 
         ('M12'), 
         ('M13'), 
         ('M29'); 

我想通過運行一個DELETE刪除此表中的重複模式或者,這樣的模式將只出現一次,如下

1 M24 
2 M22 
3 M25 
6 M35 
7 M15 
8 M18 
12 M17 
13 M19 
14 M29 
16 M12 
18 M13 
+2

可能重複:http://stackoverflow.com/questions/3311903/remove-duplicate-rows-in-mysql –

+1

'從模型DD其中刪除存在(select * from models xx where xx.model_no = dd.model_no AND xx.model_id wildplasser

+0

感謝您回覆它的顯示錯誤 – ArrayOutOfBound

回答

2
delete m from models m 
join models m2 on m2.model_no = m.model_no and m.model_id > m2.model_id 
2

要刪除已存在於表中可以使用重複更新查詢:

CREATE TEMPORARY TABLE tmp (ModelID INT NOT NULL); 

INSERT tmp (ModelID) 
SELECT t1.Model_ID 
FROM Models t1 
WHERE EXISTS 
     ( SELECT 1 
      FROM Models t2 
      WHERE t1.Model_No = t2.Model_No 
      AND  t2.Model_ID < t1.Model_ID 
     ); 

DELETE 
FROM Models 
WHERE Model_ID IN (SELECT ModelID FROM tmp); 

SQL Fiddle

然後前進,你應該添加一個唯一索引,以阻止進一步的重複。

CREATE UNIQUE INDEX UQ_Models ON Models (Model_No); 
1

嘗試使用臨時表。

create temporary table tmpTable (model_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
        model_no varchar(255)); 



insert tmpTable 
    (model_id) 
select model_id 
from models m 
where exists 
    (
    select * 
    from models m2 
    where m2.model_no = m.model_no 

      and m2.model_id> m.model_id 
    ); 

delete 
from models 
where model_id in (select model_id from tmpTable); 
0

試試這個:

ALTER IGNORE TABLE `models` 
ADD UNIQUE INDEX (`model_no`);