删除几个条件的列

时间:2012-02-03 13:12:14

标签: mysql

在之前的一个问题中,我问过如何根据某些条件总计总数: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

2 个答案:

答案 0 :(得分:0)

这已经多次在stackowerflow上,你不能UPDATE/DELETE表与嵌套select的数据在同一个表上。有两种方法可以做到这一点:

  • 之前加载所有数据(例如通过php,sql程序)
  • 创建与您正在使用的临时表clone data一样的临时表,并使用临时表来选择项目

答案 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 ;

这有助于你吗?