通过在sql中使用两列来删除表中的重复项?

时间:2014-12-05 09:35:22

标签: mysql sql duplicates

我有这样的表

Id Name Lang   templateid
1  xxx  ENGISH  1
2  xxx  SPANISH 2
3  xxx  ENGISH  1
4  xxx  ENGISH  1
5  xxx  ENGISH  1
6  xxx  SPANISH 1

我想删除具有相同lang和templateid的重复记录。例如,templateid 1 + Lang ENGLISH不止一次重复。

删除重复记录并留下最新的记录即,Id 5是英语的最新记录。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

MySQL

<强>查询

DELETE t2
FROM   tbl t1
JOIN   tbl t2 ON 
(
   t2.lang = t1.lang
   AND t2.templateId=t1.templateId
   AND t2.id < t1.id
);

<强> Fiddle Demo



PostgreSQL

<强>查询

DELETE FROM tbl t1
WHERE id IN 
(
  SELECT t1.id
  FROM   tbl t1
  JOIN   tbl t2 ON 
  (
    t2.lang = t1.lang
    AND t2.templateId=t1.templateId
    AND t2.id > t1.id
  )
);

<强> Fiddle Demo