我试图从mysql表中删除一些重复的记录,但它不工作。x1c 0d1x
我正在接受https://www.javatpoint.com/mysql-delete-duplicate-records的帮助
如果我将尝试与示例数据库,这是给出的例子,它是工作正常。
但在我的table上,它不起作用。
DELETE S1 FROM employee_attendance AS S1 INNER JOIN employee_attendance AS S2 WHERE S1.DbKey < S2.DbKey AND S1.DivisionDbKey = S2.DivisionDbKey AND S1.Date = S2.Date AND S1.Month = S2.Month AND S1.FinancialYearDbKey = S2.FinancialYearDbKey AND S1.EmployeeDbKey = S2.EmployeeDbKey AND S1.Attendance = S2.Attendance AND S1.InTime = S2.InTime AND S1.OutTime = S2.OutTime AND S1.EmployeeDbKey = 6798 AND S1.Month = '05' AND S1.FinancialYearDbKey = 5;
出现错误
1205 -超过锁定等待超时;尝试重新启动事务
我试过另一个例子https://www.geeksforgeeks.org/sql-query-to-delete-duplicate-rows/
DELETE FROM employee_attendance WHERE DbKey NOT IN (SELECT MAX(DbKey) FROM employee_attendance WHERE EmployeeDbKey = 6798 AND Month = '05' AND FinancialYearDbKey = '5' GROUP BY DivisionDbKey,Date,Month,FinancialYearDbKey,EmployeeDbKey,Attendance,InTime,OutTime)
我遇到相同错误。
1205 -超过锁定等待超时;尝试重新启动事务
如有任何建议,我们将不胜感激。谢谢。
1条答案
按热度按时间woobm2wo1#
我个人认为这是一个不好的做法。你应该做一个(空的)表
employee_attendance
的副本,然后在这个新表上定义一个UNIQUE KEY
,这样可以防止重复条目。请考虑以下步骤:
1.创建重复表:
1.添加
UNIQUE INDEX
-现在,这只是一个简单的例子。您可以添加或减少唯一索引的列,但请确保先删除现有的唯一索引,然后才重新创建:1.使用
INSERT IGNORE..
将数据插入到新表中:1.检查并比较这两个表。如果对结果满意,请重命名这些表:
1.现在,您有了一个没有重复项的新表和一个用于参考的旧表,或者如果您需要从旧表中获取一些数据,则可以使用旧表。
Fiddle example