复制表并使用文本列替换外部代理键列

时间:2015-11-26 03:07:55

标签: mysql database

我正在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并在应用程序端进行分配会更容易/更有效吗?

干杯

1 个答案:

答案 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子句来执行以块为单位的插入。