MySQL将数据从一个表迁移到另一个表

时间:2018-02-13 12:12:11

标签: mysql sql phpmyadmin

我正在尝试将数据从一个表移动到另一个表,作为数据库体系结构重组的一部分。我正在使用PHPMyAdmin和MySQL来实现这一目标。

SQL意味着,对于每个emergency_contacts.id,将e_c.ide_c.activity_id移动到activities_emergency_contacts,其中该对将形成一个复合键,用于将联系人与活性。

以下SQL返回错误:

CREATE PROCEDURE dowhile()

BEGIN
    SET @cid = (SELECT MIN(`id`) FROM `emergency_contacts`);
    SET @aid = (SELECT `activity_id` FROM `emergency_contacts` WHERE `id` = @cid);    

    WHILE @cid IS NOT NULL DO

        INSERT INTO activities_emergency_contacts (activity_id, contact_id) 
        VALUES (@aid, @cid);

        SET @cid = (SELECT MIN(id) FROM emergency_contacts WHERE @cid < id);
        SET @aid = (SELECT activity_id FROM emergency_contacts WHERE id = @cid);

    END WHILE;                
END;

CALL dowhile();
  

SQL查询:

     

CREATE PROCEDURE dowhile()BEGIN SET @cid =(SELECT MIN(id)FROM FROM   emergency_contacts

     

MySQL说:

     

#1064 - 您的SQL语法出错;查看与MySQL服务器版本对应的手册,以便在第3行''附近使用正确的语法

我搜索了MySQL特定文档,尝试查找我的SETWHILEBEGIN/ENDINSERTCREATE的任何问题 - 只是关于每一行。我不确定如何继续。任何建议都将不胜感激。

编辑:我在WHILE SELECT MIN (id)内错过了一个结束括号,但是我已经解决了这个问题,但仍然遇到了完全相同的问题。

编辑:问题是我没有使用DELIMITER。正确的SQL:

DELIMITER $$
CREATE PROCEDURE dowhile()
BEGIN
    SET @cid = (SELECT MIN(`id`) FROM `emergency_contacts`);
    SET @aid = (SELECT `activity_id` FROM `emergency_contacts` WHERE `id` = @cid);    
    WHILE @cid IS NOT NULL DO
        INSERT INTO activities_emergency_contacts (activity_id, contact_id) VALUES (@aid, @cid);
        SET @cid = (SELECT MIN(id) FROM emergency_contacts WHERE @cid < id);
        SET @aid = (SELECT activity_id FROM emergency_contacts WHERE id = @cid);
    END WHILE;                
END$$

DELIMITER ;

CALL dowhile();

0 个答案:

没有答案