我正在尝试将数据从一个表移动到另一个表,作为数据库体系结构重组的一部分。我正在使用PHPMyAdmin和MySQL来实现这一目标。
SQL意味着,对于每个emergency_contacts.id
,将e_c.id
和e_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 FROMemergency_contacts
)MySQL说:
#1064 - 您的SQL语法出错;查看与MySQL服务器版本对应的手册,以便在第3行
''
附近使用正确的语法
我搜索了MySQL特定文档,尝试查找我的SET
,WHILE
,BEGIN/END
,INSERT
,CREATE
的任何问题 - 只是关于每一行。我不确定如何继续。任何建议都将不胜感激。
编辑:我在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();