mysql关联表修改SQL

有3张表
table1,table2,table3
其中
t1存client_id,client_name,id_num
t2存client_id,client_name,id_num
t3存client_id,agreement_no,product_no

有如下现象
t1.client_name = t2.client_name,
t1_id_num = t2.id_num,
t1.client_id != t2.client_id,

t3有多条数据项,其中1条的client_id = t1.client_id,剩余的client_id = t2.client_id

如何编写sql将t3表中等于t1.client_id的数据修改成t2.client_id

示例:

tableclient_idclient_nameid_numagreement_noproduct_no
t1111张三666//
t2222张三666//
t3111//77702
t3222//88803
t3222//99904

【以下回答由 GPT 生成】

问题的解决步骤如下:

  1. 首先,我们需要使用 SELECT 语句确认需要修改的数据。我们需要选择 table3client_id 等于 table1.client_id 的数据,并与 table2 进行连接以获取正确的 client_id。我们可以使用以下 SQL 语句来完成这个操作:
SELECT t3.client_id, t2.client_id AS new_client_id, t3.agreement_no, t3.product_no
FROM table3 t3
JOIN table1 t1 ON t3.client_id = t1.client_id
JOIN table2 t2 ON t1.client_name = t2.client_name AND t1.id_num = t2.id_num
WHERE t1.client_id <> t2.client_id
  1. 确认结果正确后,我们可以使用 UPDATE 语句将 table3 中的数据更新为正确的 client_id。我们可以使用以下 SQL 语句来完成更新操作:
UPDATE table3 t3
JOIN table1 t1 ON t3.client_id = t1.client_id
JOIN table2 t2 ON t1.client_name = t2.client_name AND t1.id_num = t2.id_num
SET t3.client_id = t2.client_id
WHERE t1.client_id <> t2.client_id

这样,我们就成功地将 table3 表中等于 table1.client_id 的数据修改为了 table2.client_id。请注意,在执行这些 SQL 语句之前,请先做好数据备份,以防止数据丢失。

如果你还有其他问题,请随时告诉我。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你可以使用UPDATE语句和JOIN子句来实现这个目标。首先,通过JOIN将t1、t2和t3表连接起来,然后在UPDATE语句中指定要更新的条件和新的值。

以下是一个示例的SQL查询:

UPDATE table3
SET client_id = t2.client_id
FROM table3
JOIN table1 ON table3.client_id = table1.client_id
JOIN table2 ON table1.client_name = table2.client_name AND table1.id_num = table2.id_num

这个查询会将table3中client_id等于table1.client_id的记录的client_id字段更新为table2.client_id。

请注意,这个查询假设每个条件都是一对一的关系。如果存在多个t2.client_id与相同的t1.client_name和t1.id_num匹配,那么你可能需要进一步澄清你的需求来决定如何处理这种情况。

可以使用union all