-1

こんにちは、次のコードでテーブルを切り捨てる前に、テーブルのバックアップを保持しようとしています。

IF EXISTS (`emails3`) THEN
    SELECT * INTO `emails3` 
    FROM `emails1`;

    SELECT * INTO `emails3` 
    FROM `emails2` 
    WHERE NOT `word` IN (SELECT `word` 
                         FROM `emails1`) AND 
          `word` NOT IN (SELECT `word` 
                         FROM `emails3`);
END IF;

IF NOT EXISTS (`emails3`) THEN
            CREATE TABLE `emails3` SELECT * FROM `emails1`;
            SELECT * INTO `emails3` 
            FROM `emails2` 
            WHERE NOT `word` IN (SELECT `word` FROM `emails1`);
END IF;

TRUNCATE `emails1`;

しかし、私はそのエラーを受け取り続けています。私は mysql 初心者なので、何が問題なのかわかりません。コードの何が問題なのかがわかれば、助けてください。

4

1 に答える 1

1

クエリはプロシージャに格納されていますか? 直接実行することはできないと思います。私も疑います

存在する場合 ( emails3)

意図したとおりに動作しています。

クエリをプロシージャにしてみてください。

DELIMITER | 
Drop procedure if exists `backup_table`;
CREATE PROCEDURE `backup_table` () 

BEGIN 

IF EXISTS (SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'test' AND table_name = 'emails3') THEN
    INSERT INTO `emails3` SELECT * FROM `emails1`;
    INSERT INTO `emails3` SELECT * FROM `emails2` 
        WHERE NOT `word` IN (SELECT `word` FROM `emails1`) 
             AND `word` NOT IN (SELECT `word` FROM `emails3`);
END IF;

END| 

DELIMITER ;
于 2012-07-03T02:08:48.977 に答える