mysql使用join做update操纵与使用join做查询时出现重复记录的问题

    在实际处理数据过程中,有一些数据可能会从别的地方导入过来,两个表有关联,但是一个表中的某一列缺失,如果要补全,可以利用另一个表来做填充。这里就是今天的第一个问题,使用update的时候,join另一个表。

    如下所示,xx_a中的数据是完整的,xx_b中的name是缺失的,假定xx_b中的user_id正好与xx_a中的id对应,这个时候,我们可以直接update修改xx_b,让xx_b.name = xx_a.name,但是需要给出关联条件与连接语句。

    

这里update语句的编写和查询语句有些类似,但是又有一些区别。update 的语法是

update xx_b set name = ${name} where id = ${id}

但是这里,我们需要关联xx_a,语句如下:

UPDATE xx_b b 
LEFT JOIN xx_a a 
ON b.user_id = a.id
SET b.name = a.name

SQL运行截图如下:

 

    修改之后,发现两边的数据都一样了。

    这种修改,背后隐藏的逻辑就是xx_a 、xx_b两边的数据是一一对应的,一个id对应另一个表,只有一个记录。但是,如果是一对多的问题,那么在查询的时候可能会出现很怪异

MySQLUPDATE JOIN操作是用来根据两个或多个表之间的关联条件,同更新多个表的记录。在某些情况下,使用UPDATE JOIN可能会导致插入复的记录。 原因可能有以下几点: 1. 关联条件不准确:在UPDATE JOIN语句中,需要明确定义两个或多个表之间的关联条件。如果关联条件定义不准确,可能会导致多个匹配的记录被更新,从而插入复的记录。 2. 数据冲突:如果在UPDATE JOIN操作中更新的字段存在唯一性约束,而更新操作引起了唯一性冲突,那么会出现插入重复记录的情况。 3. 复数据:如果被更新的表中存在复的数据,则在UPDATE JOIN操作中可能会出现插入重复记录的情况。例如,如果更新关联条件匹配到了多条相同的记录,则每一条匹配的记录都会被更新,从而插入了复的记录。 为了避免在UPDATE JOIN操作中插入复的记录,可以采取以下措施: 1. 仔细定义关联条件:确保UPDATE JOIN语句中的关联条件准确无误,只匹配到需要更新的记录,避免多余的匹配。 2. 检查唯一性约束:在更新操作之前,先检查被更新的字段是否存在唯一性约束,确保不会引起唯一性冲突。 3. 清理复数据:如果被更新的表中存在复的数据,可以先进行数据清理,删除复的记录,然后再执行UPDATE JOIN操作。 总之,要确保在使用MySQLUPDATE JOIN操作不插入复的记录,需要注意关联条件的准确性、唯一性约束的检查以及数据的清理工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值