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

标签 mysql database

我正在 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/

相关文章:

mysql - 无法从另一个存储例程中创建 TRIGGER - 另一个 "stored routine"是什么?

mysql - 我如何处理 NodeJS 上的 MySQL 断开连接?

mysql - 查找每个月的最小值和最大值 'Rainfall' 以及相应的月份和日期

php - 我的 html 表单没有使用 php mysql 将值发布到数据库中

mysql - 列名 'User ID' 的简单 WHERE 子句?

java - 我可以在 .war 文件之外有一个可修改的 Java 文件吗? (但仍然连接到 .war 项目)

mysql - 数据库设计 - 保持 25 000 个用户的历史平均值

mysql - 与 mysql 相同的 Firebird 数据库表中的最大记录数?

database - 关系文档存储(NoSql?)数据库引擎有哪些选择?

database - 如何确定完成 3NF 的正确步骤?