Mysql存储过程,用于复制父子孙子层次结构中的记录

Mysql存储过程,用于复制父子孙子层次结构中的记录,第1张

概述我有3个表父母,孩子和&形式的孙子:+----------------+ +----------------+ +---------------------+ | parent | | child | | grandchild | +----------------+ +----

我有3个表父母,孩子和&形式的孙子:

+----------------+   +----------------+   +---------------------+| parent         |   | child          |   | grandchild          |+----------------+   +----------------+   +---------------------+| parent_ID (PK) |   | child_ID (PK)  |   | grandchild_ID (PK)  || parent_data    |   | child_data     |   | grandchild_data     |+----------------+   | parent_ID (FK) |   | child_ID (FK)       |                     +----------------+   +---------------------+ 

PK =自动递增主键.
FK =外键.

我想要一个存储过程,可以复制父表中的记录以及子表和孙表中的任何相关记录.我可以将父数据和子数据复制好,这是我正在努力的孙子表.这是我所拥有的:

CREATE FUNCTION sf_copy_parent(p_parent_ID INT) RETURNS INTBEGIN    DECLARE new_parent_ID INT;    -- create new parent record    INSERT INTO parent(parent_data)        SELECT parent_data FROM parent        WHERE parent_ID=p_parent_ID;    SET new_parent_ID=LAST_INSERT_ID();    -- copy child records    INSERT INTO child(child_data,parent_ID)        SELECT child_data,new_parent_ID FROM child        WHERE parent_ID=p_parent_ID;    -- copy grandchild records ???    -- return    RETURN new_parent_ID;END

我正在使用MysqL5.5,如果这很重要的话.最佳答案尝试这个SELECT查询(它使用’p_parent_ID’和’new_parent_ID’变量) –

SET @r1 = 1;SET @child_ID = NulL;SET @r2 = 0;SELECT c1.grandchild_data,c2.child_ID FROM (  SELECT @r1 := if(c.child_ID IS NulL OR c.child_ID <> @child_ID,@r1 + 1,@r1) rank,@child_ID := c.child_ID,c.child_ID,g.grandchild_data FROM child c  JOIN grandchild g    ON c.child_ID = g.child_ID  WHERE    c.parent_ID = p_parent_ID  ORDER BY    c.child_ID,g.grandchild_ID  ) c1JOIN (SELECT @r2 := @r2 + 1 rank,child_ID FROM child WHERE parent_ID = new_parent_ID ORDER BY child_ID) c2  ON c1.rank = c2.rank;

如果它有效,我们将把它重写为INSERT..SELECT语句,或者尝试自己做;) 总结

以上是内存溢出为你收集整理的Mysql存储过程,用于复制父/子/孙子层次结构中的记录全部内容,希望文章能够帮你解决Mysql存储过程,用于复制父/子/孙子层次结构中的记录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168677.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存