3

多くの削除クエリがありますが、一部の運用データベースでは一部のテーブルが見つかりません。この問題について簡単な決定が必要です。

のようなクエリ

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

2 に答える 2

4

後者が存在する場合にテーブルの行を削除する必要がある場合は、カスタムストアドプロシージャに頼る必要があると思います。そんな感じ:

-- 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",...特定のニーズに合わせてパーツを調整することもできます。

于 2013-07-31T12:08:09.683 に答える
1

DROP を使用する前に、テーブルで SELECT クエリを囲むことができます...

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

削除コマンドの前に IF EXISTS(ここでクエリを選択) のように聞こえますが、それはあなたが探しているものですか? 私は postgresql 派なので、SQL エラーが存在する場合はご容赦ください。

この投稿のその他の例。

于 2013-07-31T11:47:31.780 に答える