一般使用=的情況可以直接刪除。如:
DELETE FROM sys_menu WHERE pcode = 'member'
但是如果使用帶有查詢本表的select時,sql如下:
DELETE FROM sys_menu WHERE pcode in (SELECT `code` FROM sys_menu WHERE pcode = 'member')
則會報錯如下:
You can't specify target table 'sys_menu' for update in FROM clause
意思是不能先select出同一表中的某些值,再update這個表(在同一語句中)。
這時需要利用臨時表:
1、建立臨時表
CREATE TABLE temp(SELECT `code` FROM sys_menu WHERE pcode = 'member')
2、執行刪除
DELETE FROM sys_menu WHERE pcode in (SELECT * FROM temp)
3、刪除臨時表
DROP TABLE temp