有這樣一個例子:
刪除除了編號id不同, 其他都相同的學生冗余信息。

感覺很簡單,先按照除了編號以外的字段分組,查詢出結果,然后刪除id不在查詢結果中的數據。
sql語句就是這樣:
DELETE FROM table2 WHERE id NOT IN (SELECT MAX(id) AS id FROM table2 GROUP BY NAME,studentID)
但是結果會報錯:You can't specify target table 'table2' for update in FROM clause

報錯原因是因為不能先從同一張表中查出數據,然后再在同一張表中進行update操作。
可以通過建一張臨時表來解決這個問題。
SELECT tmp.id FROM (SELECT MAX(id) AS id FROM table2 GROUP BY NAME,studentID) tmp
然后刪除id不在這張臨時表中的數據。最后的sql語句就是這樣:
DELETE FROM table2 WHERE id NOT IN (SELECT tmp.id FROM (SELECT MAX(id) AS id FROM table2 GROUP BY NAME,studentID) tmp)

