如何更新一个外键字段,它实际上是其父级中具有唯一id的重复项?

j8ag8udp  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(229)

我有一个 Widget 字段为的表 [id(primary key), label} . 不知怎的,这张table是重复的 label 字段如下所示。

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

还有一张table叫 companylabel_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,以及其他具有重复标签id的记录。之后删除所有重复的记录 Widget table。

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

需要建议怎么做吗??

r9f1avp5

r9f1avp51#

不确定你的要求,但可能是这样的
sql演示

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) |

相关问题