gpt4 book ai didi

mysql - 使用父 ID 将表连接到自身,直到没有更多行

转载 作者:行者123 更新时间:2023-11-29 18:50:50 25 4
gpt4 key购买 nike

我有一个表,描述对 end_customers 表所做的更改。当某人发生更改并且 end_customer 时,我们会在 end_customers 表中创建一个新行,并向 end_customer_history 表添加一行,其中 end_customer_parent_id > 是旧 end_customer 的 ID,end_customer_child_id 是新 end_customer 的 ID。

最终客户表:

CREATE TABLE `end_customers` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`reference_person` varchar(255) DEFAULT NULL,
`phone_number` varchar(255) NOT NULL,
`email` varchar(255) DEFAULT NULL,
`social_security_number` varchar(255) DEFAULT NULL,
`comment` longtext,
`token` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=101107 DEFAULT CHARSET=utf8;

最终客户历史记录表:

CREATE TABLE `end_customer_history` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`end_customer_parent_id` bigint(20) NOT NULL,
`end_customer_child_id` bigint(20) NOT NULL,
`user_id` bigint(20) NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_end_customer_parent` (`end_customer_parent_id`),
KEY `FK_end_customer_child` (`end_customer_child_id`),
KEY `FK_user` (`user_id`),
CONSTRAINT `end_customer_history_old_ibfk_1` FOREIGN KEY (`end_customer_parent_id`) REFERENCES `end_customers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `end_customer_history_old_ibfk_2` FOREIGN KEY (`end_customer_child_id`) REFERENCES `end_customers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `end_customer_history_old_ibfk_3` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=utf8;

我们现在正在重构架构,以便对 end_customers 表所做的更改直接编辑行而不是创建新行,并将旧数据的副本放入 end_customer_history_new code> 表与 end_customers 具有相同的架构。

我需要将所有旧数据迁移到这个新表。因此,对于我拥有的每个 end_customer ,我需要检查它在 end_customer_history 中是否有一个条目作为 end_customer_child_id (它已被修改),并且然后检查该条目父项是否也作为子项存在于 end_customer_history 中,然后检查该条目父项是否也作为子项存在于 end_customer_history 中,依此类推,直到出现不再有行。

如何在一个迁移 SQL 脚本中执行此操作?

最佳答案

与 Oracle 不同,MySQL 不提供递归查询父子层次结构的功能。如果您事先知道级别,则可以编写自连接查询(或内部查询)。如果没有,您必须执行单个查询并处理应用程序或存储过程中的递归性。

Here如果您已经知道级别,则查询父子层次结构的示例是 here这是一个如何在 Oracle 中执行此操作的示例(供您引用)。

关于mysql - 使用父 ID 将表连接到自身,直到没有更多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44366446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com