gpt4 book ai didi

mysql - 如何更新实际上在其父级中具有唯一 id 重复项的外键字段?

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

我有一个 Widget 表,其字段为 [id(主键), label}。该表以某种方式作为重复的 label 字段,如下所示。

+-----+----------+
| id | label |
+-----+----------+
| 01 | Customer |
| 02 | Client |
| 03 | Customer |
| 04 | Customer |
| 05 | Customer |
| 06 | Client |
| 07 | Client |
+-----+----------+

还有另一个名为 company 的表,其中 label_id 作为外键。外键可以为空。

+-----+------+----------+
| id | name | label_id |
+-----+------+----------+
| 400 | ABC | 01 |
| 401 | DEF | 02 |
| 402 | ADF | 06 |
| 403 | QWE | 05 |
| 404 | RST | 06 |
| 405 | WAS | null |
+-----+------+----------+

由于 label_id 0605 是重复的,因为它们指向相同的 CustomerClient 标签。我需要将它们重新分配给 id 01 和 02 以及具有此类重复 label_ids 的所有其他记录。之后删除 Widget 表中的所有重复记录。

Note :`CASCADE on DELETE` referential action is not applied in my table.

需要有关如何执行此操作的建议吗?

最佳答案

不确定您的要求,但也许是这样的

<强> SQL DEMO

UPDATE Company C
SET
`label_id` = (SELECT MIN(`id`)
FROM Widget
WHERE `label` = (SELECT `label`
FROM Widget W
WHERE W.`id` = C.`label_id`)
);

输出

|  id | name | label_id |
|-----|------|----------|
| 400 | ABC | 1 |
| 401 | DEF | 2 |
| 402 | ADF | 2 |
| 403 | QWE | 1 |
| 404 | RST | 2 |
| 405 | WAS | (null) |

关于mysql - 如何更新实际上在其父级中具有唯一 id 重复项的外键字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51406006/

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