SQL UPDATE或DELETE如果重复

时间:2015-09-08 08:24:48

标签: mysql

我试图在我的数据库中运行3个查询:

UPDATE `table` SET `rubriq` = '77' WHERE `rubriq` = '61';
UPDATE `table` SET `rubriq` = '77' WHERE `rubriq` = '62';
UPDATE `table` SET `rubriq` = '77' WHERE `rubriq` = '63';

table我有两列abonnerubriq。 Abonne是主键,两个是索引。

如果在我的数据库中我有例如:

 abonne  | rubriq  
  84     |   61  
  84     |   62 
  84     |   63

当我运行我的3个查询时,第一个没有问题,但对于第二个,我有一个错误:#1062 - Duplicate entry '84-77' for key 1

如何运行这3个查询,但是当出现类似错误时,只需删除该行?

谢谢!

2 个答案:

答案 0 :(得分:3)

您必须手动删除会导致冲突的记录:

UPDATE `table` SET rubriq = 77 WHERE rubriq = 61;

DELETE t62
FROM   `table` t77
  JOIN `table` t62 USING (abonne)
WHERE  t77.rubriq = 77
   AND t62.rubriq = 62;

UPDATE `table` SET rubriq = 77 WHERE rubriq = 62;

DELETE t63
FROM   `table` t77
  JOIN `table` t63 USING (abonne)
WHERE  t77.rubriq = 77
   AND t63.rubriq = 63;

UPDATE `table` SET rubriq = 77 WHERE rubriq = 63;

答案 1 :(得分:0)

这可能与eggyal正在做的事情相同,但是它们的版本太复杂了,以至于我无法理解。这是我在类似情况下所做的。

UPDATE OR IGNORE table SET rubriq = 77 WHERE rubriq = 61;
DELETE FROM table WHERE rubriq = 61;

UPDATE OR IGNORE table SET rubriq = 77 WHERE rubriq = 62;
DELETE FROM table WHERE rubriq = 62;

UPDATE OR IGNORE table SET rubriq = 77 WHERE rubriq = 63;
DELETE FROM table WHERE rubriq = 63;

基本上,如果存在重复项,则将其忽略。然后,在更新之后,删除所有剩余的行。