数据插入重复,想删除新插入的重复数据,保留原数据。
delete from bankaccounts where id not in
(select id from (
select min(id)as idfrom bankaccountsGROUP BY AccountNo HAVING COUNT(AccountNo)>1 )as total );
遇到的几个报错:
1.java.sql.SQLException: You can't specify target table 'bankaccounts' for update in FROM clause
错误提示:不能先将select出表中的某些值,再delete或update这个表(在同一语句中)。
即delete是没法和查询同一张表一起操作的。
解决办法就是嵌套一层子查询,再进行删除。
2.嵌套一层子查询又遇到报错,Mysql错误Every derived table must have its own alias。
这句话的意思是每个派生出来的表必须有一个自己的别名
一般是在多表查询或者子查询的时候会出现这个错误,因为在嵌套查询中,子查询的结果是作为一个派生表给上一级进行查询,所以子查询的结果必须有一个别名。 在子查询后加个as total即可。
网友评论