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

Vla*_*nko 5 mysql

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

查询如

DELETE b.* FROM `table` b
JOIN `another_table` u
ON u.key2 = b.key
WHERE u.key3 <> ?
Run Code Online (Sandbox Code Playgroud)

我需要类似的东西:

IF TABLE `table` EXISTS DELETE b.* FROM `table` b ...
Run Code Online (Sandbox Code Playgroud)

Syl*_*oux 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");
Run Code Online (Sandbox Code Playgroud)

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