2013-07-31 60 views
2

我有很多刪除查詢,但在某些生產數據庫中找不到某個表。我需要簡單的決定這個問題。如果表存在,則從表中刪除記錄

查詢,如

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 ... 

回答

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

您可以使用DROP前圍上表的SELECT查詢...

IF EXISTS(SELECT table.records FROM table WHERE ...) 
     DELETE records_names FROM ... 

從什麼它聽起來像IF EXISTS(在這裏選擇查詢)在你的刪除命令是你要找的?我是一個postgresql人,所以請原諒SQL錯誤,如果他們存在。

更多示例在this post

+1

我不想刪除表。我只需要從表中刪除記錄 –