删除重复项并使用标​​题保留旧重复项?

时间:2013-04-29 19:13:58

标签: mysql duplicate-removal

我需要消除类似的重复。我有一个包含以下值的列:

old1950
old1933
old1985
new_1950
new_1985
new_2008

运行删除命令后应该留下:

old1950
old1933
old1985
new_2008

正如您所见,delete命令应该保留旧命令。

所有数字前面都有一个标题'old'或'new'字面意思。

我如何实现这一目标?


现在我正在运行以下代码并且它正常工作,感谢fthiella

 CREATE TABLE yourtable (
  `accountID` varchar(32) NOT NULL,
  `deviceID` varchar(32) NOT NULL,
  col VARCHAR(20),
  PRIMARY KEY (`accountID`,`deviceID`)
  );

INSERT INTO yourtable VALUES
(1,1,'old1950'),
(1,2,'old1933'),
(1,3,'old1985'),
(1,4,'new_1950'),
(1,5,'new_1985'),
(1,6,'new_2008');

DELETE y1
FROM
  yourtable y1 INNER JOIN yourtable y2
  ON y1.col LIKE 'new_%' AND y2.col LIKE 'old%'
     AND SUBSTR(y1.col, 5)=SUBSTR(y2.col, 4)

1 个答案:

答案 0 :(得分:1)

您可以使用此查询:

DELETE y1
FROM
  yourtable y1 INNER JOIN yourtable y2
  ON y1.col LIKE 'new%' AND y2.col LIKE 'old%'
     AND SUBSTR(y1.col, 4)=SUBSTR(y2.col, 4)

请参阅小提琴here