我有很多删除查询,但在某些生产数据库中找不到某些表。我需要对这个问题做出简单的决定。
查询如
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)
如果您需要删除表中的行(如果后者存在),那么我认为您将不得不依赖自定义存储过程。像这样的东西:
-- 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",...部分以满足您的特定需求。