3

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

像这样的查询

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 ...
4

2 回答 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",...零件以适应您的特定需求。

于 2013-07-31T12:08:09.683 回答
1

您可以在使用 DROP... 之前将 SELECT 查询放在表上。

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

从听起来像 IF EXISTS(select query here) 在您的删除命令之前是您要查找的内容吗?我是一个 postgresql 人,所以如果存在 SQL 错误,请原谅。

这篇文章中有更多示例。

于 2013-07-31T11:47:31.780 回答