MySQL delete嵌套子查詢問題


有這樣一個例子:

刪除除了編號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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM