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

5

我有很多删除查询,但在一些生产数据库中找不到某些表。我需要一个简单的解决方案来解决这个问题。

例如:

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个回答

4
如果您需要删除表中的行,如果该表存在,则必须依靠自定义存储过程。一个示例代码如下:
-- 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

在使用DROP之前,您可以将SELECT查询封闭在表上...

IF EXISTS(SELECT table.records FROM table WHERE ...)
      DELETE records_names FROM ...

根据您的描述,您需要在删除命令之前使用IF EXISTS(在此处选择查询)? 我是一名postgresql专家,因此请原谅如果存在SQL错误。
更多示例请参见此帖子

1
我不想删除表格。我只需要从表格中删除记录。 - Vlad Bereschenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接