gpt4 book ai didi

MySQL foreach 循环

转载 作者:行者123 更新时间:2023-11-29 01:19:41 25 4
gpt4 key购买 nike

我必须在 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,我需要在地址中创建一个新行。我必须使用与 User.email 相同的电子邮件创建行。我必须为用户中的每一行执行此操作。

我尝试使用 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();

关于MySQL foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49239885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com