我有一个表格在我的数据库,它具有的重复记录,我希望删除。我不想创建一个新的表格有不同的条目。我想要什么是删除重复的项目,从现有的表格没有创造任何新的表格。是否有任何方式做到这一点?

 id           action
 L1_name      L1_data
 L2_name      L2_data
 L3_name      L3_data   
 L4_name      L4_data
 L5_name      L5_data
 L6_name      L6_data
 L7_name      L7_data
 L8_name      L8_data
 L9_name      L9_data
 L10_name     L10_data
 L11_name     L11_data
 L12_name     L12_data
 L13_name     L13_data 
 L14_name     L14_data
 L15_name     L15_data

看看这些所有是我的领域:
id是独特的每一个行。
L11_data是唯一对各自行动领域。
L11_data是具有公司名称的同时行动是有名的产业。

所以在我的数据的我有名称重复的公司中L11_data为他们各自的行业。

什么我想要的是必须是独一无二的名字和其他数据的公司,在特定产业存在的行动。我希望我已经说我的问题一个办法你们可以理解的。

有帮助吗?

解决方案

是的,假定你有一个独特的识字段,可以删除所有记录都是同样的,除了标识,但没有"最低ID"为他们的集团的价值。

例查询:

DELETE FROM Table
WHERE ID NOT IN
(
SELECT MIN(ID)
FROM Table
GROUP BY Field1, Field2, Field3, ...
)

注:

  • 我自由选择"表"和"ID"为代表的名字
  • 列表中的领域("Field1,Field2,...")应该包括外的所有领域的ID
  • 这可能是一个缓慢的查询依据数量的领域和行,但是我希望它会好起相比,替代品

编辑:如果你没有一个独特的指标,我的建议是简单地添加一个自动增独特的索引。主要是因为这是很好的设计,而且还因为它将允许运行查询以上。

其他提示

ALTER IGNORE TABLE 'table' ADD UNIQUE INDEX(your cols);

重复获得NULL,那么你可以将它们删除

DELETE
FROM table_x a
WHERE rowid < ANY (
  SELECT rowid
  FROM table_x b
  WHERE a.someField = b.someField
   AND a.someOtherField = b.someOtherField
  )
WHERE (
  a.someField,
  a.someOtherField
  ) IN (
  SELECT c.someField,
   c.someOtherField
  FROM table_x c
  GROUP BY c.someField,
   c.someOtherField
  HAVING count(*) > 1
  )

在上面的查询someField和someOtherField的组合必须区别地识别重复。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top