我有很多删除查询,但在一些生产数据库中找不到某些表。我需要一个简单的解决方案来解决这个问题。
例如:
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 ...
我有很多删除查询,但在一些生产数据库中找不到某些表。我需要一个简单的解决方案来解决这个问题。
例如:
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 ...
-- 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",...
部分以适应您的具体需求。
在使用DROP之前,您可以将SELECT查询封闭在表上...
IF EXISTS(SELECT table.records FROM table WHERE ...)
DELETE records_names FROM ...