作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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
06
和 05
是重复的,因为它们指向相同的 Customer
和 Client
标签。我需要将它们重新分配给 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/
我是一名优秀的程序员,十分优秀!