题
我有一个表格在我的数据库,它具有的重复记录,我希望删除。我不想创建一个新的表格有不同的条目。我想要什么是删除重复的项目,从现有的表格没有创造任何新的表格。是否有任何方式做到这一点?
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的组合必须区别地识别重复。
不隶属于 StackOverflow