如何为每个现有记录创建新记录并将现有记录引用到新创建的记录?

时间:2019-07-25 16:01:14

标签: mysql

这是我当前的数据库架构:

category表:

+------------+------------+
| id         | name       |
+------------+------------+
| 1          | category1  |
| 2          | category2  |
+------------+------------+

它是通过以下方式创建的:

CREATE TABLE `category` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3889 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

我需要通过以下方式为每个现有类别记录创建超级类别记录:

  • 添加新的自引用不可为空的列parent_id(应引用id
  • 对于新记录(超级类别),parent_id应设置为其自身记录的id
  • 对于现有记录(类别),parent_id应该设置为新创建记录的id

预期结果:

+------------+------------+------------+
| id         | name       | parent_id  |   
+------------+------------+------------+
| 1          | category1  | 3          |
| 2          | category2  | 4          |
| 3          | category1  | 3          |
| 4          | category2  | 4          |
+------------+------------+------------+

我遇到的困难是为指向新记录parent_id的现有记录设置id
有什么想法吗?

1 个答案:

答案 0 :(得分:1)

需要进行自我加入:

update category p
inner join category c
on c.name=p.name
set c.parent_id=p.id
where c.id<>p.id