我正在 MySQL 中构建数据库/应用程序。我正在尝试创建一个存储过程,该存储过程返回当前链接到父级的所有子级的表以供显示。
子表将填充最多 100,000 条记录。
我希望返回的表是子表的副本,除了将子表链接到父表(当前和上一个)的外键列应替换为包含 parent 姓名的文本列(我不这样做)想要返回代理键以供显示)
这是我的两张 table
父级
PARENTID | PARENTNAME
-------------------------
1 | NAME1
2 | NAMETWO
3 | ANOTHERNAME
child
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 的原始子表,并在应用程序端进行分配会更容易/更有效吗?
干杯
最佳答案
像这样的插入语句怎么样:
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
子句来进行 block 插入。
关于mysql - 复制表并用文本列替换外部代理键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33929946/