復制代碼 代碼如下:
CREATETABLE`users`(
`id`int(10)NOTNULLAUTO_INCREMENT,
`name`char(50)NOTNULL,
PRIMARYKEY(`id`)
)
復制代碼 代碼如下:
deletefromuserswhereidin(selectmin(id)fromusersgroupbynamehavingcount(name)>1);
結果報錯:1093youcan'tspecifytargettable....
原因是mysql刪除動作不能帶有本表的查詢動作,意思是你刪除users表的東西不能以users表的信息為條件所以這個語句會報錯,執行不了。只要通過創建臨時表作為查詢條件。如下
復制代碼 代碼如下:
deletefromuserswhereidin(select*from(selectmin(id)fromusersgroupbynamehavingcount(name)>1));
還要注意deletefromusers這裡不能用別名
其他方法。
復制代碼 代碼如下:
deleteusersasafromusersasa,(selectmin(id)id,namefromusersgroupbynamehavingcount(name)>1
)asbwherea.name=b.nameanda.id<>b.id;
建立臨時表:
復制代碼 代碼如下:
createtabletmp_usersselectmin(`id`),`name`fromusersgroupbyname;
truncatetableusers;
insertintousersselect*fromtmp_users;
droptabletmp_users;