我有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存储过程,用于复制父/子/孙子层次结构中的记录所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)