在之前的一个问题中,我问过如何根据某些条件总计总数:Count total on couple of conditions
假设我有一个这样的表:
id col1 col2 col3
1 a 1 k1
2 a 2 k2
3 a -3 k3
4 b 3 k4
现在,当我得到id = 1时,我想删除col1 = a的所有行。 当我得到id = 4时,我想删除col1 = b的所有行。
我将如何在SQL中执行此操作?
我根据之前的回答尝试过:
DELETE FROM table WHERE (col1) IN (SELECT col1 FROM table WHERE id = '1')
但这给了我一个错误:#1093 - You can't specify target table 'table' for update in FROM clause
答案 0 :(得分:0)
这已经多次在stackowerflow上,你不能UPDATE/DELETE
表与嵌套select的数据在同一个表上。有两种方法可以做到这一点:
答案 1 :(得分:0)
我有另一个建议的解决方案。如果您为此问题创建STORED PROCEDURE
该怎么办?
DELIMITER $$
CREATE PROCEDURE `DeleteRec`(IN xxx varchar(5))
BEGIN
DECLARE oID varchar(5);
SET oID := (SELECT col1 FROM table WHERE id = '1');
DELETE FROM table WHERE col1 = oID;
END$$
DELIMITER ;
这有助于你吗?