我有一个现有的联系人表,其中包含大约 140k 条记录。我正在介绍一个父表(我们称它们为“parent_contacts”),这样一个 parent_contact 可以有多个联系人;但最初, parent_contacts 将被播种为数据库中当前存在的每个联系人都有一个记录。
我以为我很聪明地尝试了以下类似的事情,我现在明白这是不允许的(假设所有必要的 parent_contact 记录都已提前创建):
UPDATE contacts
SET contacts.parent_id =
(SELECT parent_contacts.id FROM parent_contacts
WHERE NOT EXISTS
(SELECT * FROM contacts AS c WHERE c.parent_id = parent_contacts.id) LIMIT 1)
(如果不是很明显,这里的想法是将每个联系人的 parent_id 设置为另一个联系人尚未链接到的第一个 parent_contact 的 id)
由于这种特定方法是不可能的,是否有另一种不涉及执行 140k 单独更新语句的方法?
跟进:我通过在父表上引入临时 child_id 解决了这个问题,然后在播种完成后将其删除。但在最初的问题的背景下,我认为托尼在下面的回答听起来很恰当。