一般使用=的情况可以直接删除。如:
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