如果表存在,则从表中删除记录

时间:2013-07-31 11:44:49

标签: mysql

我有很多删除查询但在某些生产数据库中找不到某些表。我需要对这个问题做出简单的决定。

查询

DELETE b.* FROM `table` b
JOIN `another_table` u
ON u.key2 = b.key
WHERE u.key3 <> ?

我需要类似的东西:

IF TABLE `table` EXISTS DELETE b.* FROM `table` b ...

2 个答案:

答案 0 :(得分:2)

如果需要删除表的行,如果存在后者,则必须依赖于我认为的自定义存储过程。类似的东西:

-- Define the procedure
CREATE PROCEDURE delete_if_exists(IN tbl CHAR(80))
BEGIN
    IF @tbl IN (select table_name from information_schema.tables where table_schema = "db_2_44afb7")
    THEN
        SET @query = CONCAT("DELETE FROM ", @tbl);
        PREPARE stmt FROM @query;
        EXECUTE stmt;
    END IF;
END //

-- use it
CALL delete_if_exists("mytable");
CALL delete_if_exists("myothertable");

请参阅http://sqlfiddle.com/#!2/2ee190/3以获取示例。
当然,您可以调整"DELETE FROM",...部分以满足您的特定需求。

答案 1 :(得分:1)

您可以在使用DROP ...

之前将SELECT查询括在表中
IF EXISTS(SELECT table.records FROM table WHERE ...)
      DELETE records_names FROM ...

听起来像删除命令之前的IF EXISTS(在这里选择查询)听起来是什么?我是一个postgresql人,所以请原谅SQL错误。

this post中的更多示例。

相关问题