我有很多删除查询,但在某些生产数据库中找不到某些表。我需要对这个问题做出简单的决定。
像这样的查询
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 ...
从听起来像 IF EXISTS(select query here) 在您的删除命令之前是您要查找的内容吗?我是一个 postgresql 人,所以如果存在 SQL 错误,请原谅。
这篇文章中有更多示例。