我必须迭代 MySQL 中的 User 表中的每一行。
我需要为用户中的每次迭代创建一个新行地址,并具有下面描述的一些条件。
我有3张桌子:
User: id, stuff, id_person, email
Person: id, stuff, id_address
Address: id, email
如果 User.id_person 不为 NULL 并且 person.id_address 为 NULL,我需要在 Address 中创建一个新行。
我必须使用与 User.email 相同的电子邮件创建行。
我必须对 User 中的每一行执行此操作。
我尝试使用 MySQL 游标,但我不知道如何很好地使用它们。
我怎样才能做到这一点?除了使用光标之外还有其他方法吗?
提前致谢。
编辑:我刚刚意识到我还必须使用我刚刚创建的地址行的 id 更新 person.id_address 。
据我所知,只要字段是您提供的,以下内容就足够了。
INSERT INTO Address (email)
SELECT User.email
FROM User JOIN person ON User.id_person = person.id
WHERE person.id_address IS NULL
;
编辑(用光标)
使用光标这应该非常简单,但是我强烈建议您熟悉这些及其含义。
DROP PROCEDURE IF EXISTS _tmp_update_address;
DELIMITER $$
CREATE PROCEDURE _tmp_update_address()
BEGIN
DECLARE cursor_List_isdone BOOLEAN DEFAULT FALSE;
DECLARE cur_userId, cur_personId INT;
DECLARE cur_email VARCHAR(250) DEFAULT '';
DECLARE cursor_List CURSOR FOR
SELECT User.id, person.id_address, User.email
FROM User JOIN person ON User.id_person = person.id
WHERE person.id_address IS NULL
;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET cursor_List_isdone = TRUE;
OPEN cursor_List;
loop_List: LOOP
FETCH cursor_List INTO cur_userId, cur_personId, cur_email;
IF cursor_List_isdone THEN
LEAVE loop_List;
END IF;
INSERT INTO Address (email) VALUES (cur_email);
UPDATE person SET person.id_address = LAST_INSERT_ID()
WHERE person.id = cur_personId;
END LOOP loop_List;
CLOSE cursor_List;
END
$$
DELIMITER ;
CALL _tmp_update_address();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)