多くの削除クエリがありますが、一部の運用データベースでは一部のテーブルが見つかりません。この問題について簡単な決定が必要です。
のようなクエリ
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(ここでクエリを選択) のように聞こえますが、それはあなたが探しているものですか? 私は postgresql 派なので、SQL エラーが存在する場合はご容赦ください。
この投稿のその他の例。