我正在MySQL中构建数据库/应用程序。我正在尝试创建一个存储过程,该过程返回当前链接到父项的所有子项的表,以供显示。
子表格最多可填充100,000条记录。
我希望返回的表是子表的副本,除了将子项链接到父项(当前和上一个)的外键列应替换为包含父项名称的文本列,(我不想要返回显示的代理键)
这是我的两张桌子
父
PARENTID | PARENTNAME
-------------------------
1 | NAME1
2 | NAMETWO
3 | ANOTHERNAME
子
CHILDNAME | CURRENTPARENTID | PREVIOUSPARENTID | OTHERDATA COLUMNS...
-----------------------------------------------------------------------
123ABC | 2 | 3 | ..
124ABC | 2 | 1 | ..
125ABC | 1 | 2 | ..
例如,当我调用存储过程返回currentparentID = 2的所有子节点时,我希望返回的表是
CHILDNAME | CURRENTPAR_NAME| PREVIOUSPAR_NAME | OTHERDATA COLUMNS...
-----------------------------------------------------------------------
123ABC | NAMETWO | ANOTHERNAME | ..
224ABC | NAMETWO | NAME1 | ..
我无法确定如何制作INSERT INTO语句
将原始子表格过滤到currentparentid = 2并在应用程序端进行分配会更容易/更有效吗?
干杯
答案 0 :(得分:1)
这样的插入语句怎么样:
INSERT INTO NewTable(CHILDNAME, CURRENTPAR_NAME, PREVIOUSPAR_NAME)
SELECT c.CHILDNAME, p1.PARENTNAME, p2.PARENTNAME
FROM Child c
JOIN Parent p1 ON (p1.PARENTID = c.CURRENTPARENTID)
JOIN Parent p2 ON (p2.PARENTID = c.PREVIOUSPARENTID)
;
根据子表的结构,无论它是否处于活动状态等,您可以使用WHERE
子句来执行以块为单位的插入。