很笨拙的数据库管理软件WorkBench,里面有很多问题,操作不便。有一个多行数据删除的操作问题就是其中之一。
比如:
DELETE FROM evs_product WHERE evs_product_id IN (
SELECT t.pro_id FROM evs_product t
WHERE t.pro_code = 'DEC_MCK'
);
报错信息可能是:
You can't specify target table 'tms_daily_plan' for update in FROM clause
原因是你不能直接在一层嵌套外使用in。myqsl删除时in后面的子查询不能带where条件,带where条件的必须使用别名。
所以需要加一层嵌套:
DELETE FROM evs_product WHERE evs_product_id IN (
SELECT ids.pro_id FROM (
SELECT t.pro_id FROM evs_product t
WHERE t.pro_code = 'DEC_MCK'
) ids
);
但是在WorkBench里依然不行。因为软件默认的sql操作限制很严格。所以需要手动放开限制。
在上面的菜单栏里找到首选项,在里面找到一项对多行数据更新删除限制的打钩项,将√去掉,然后关闭WorkBench再重启WorkBench,就可以正常操作多行数据的删除了。