我有很多删除查询但在某些生产数据库中找不到某些表。我需要对这个问题做出简单的决定。
查询
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 ...
答案 0 :(得分:2)
如果需要删除表的行,如果存在后者,则必须依赖于我认为的自定义存储过程。类似的东西:
-- 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 :(得分:1)
您可以在使用DROP ...
之前将SELECT查询括在表中IF EXISTS(SELECT table.records FROM table WHERE ...)
DELETE records_names FROM ...
听起来像删除命令之前的IF EXISTS(在这里选择查询)听起来是什么?我是一个postgresql人,所以请原谅SQL错误。
this post中的更多示例。