mysql使用join做update操纵与使用join做查询时出现重复记录的问题
Posted luffy5459
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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对应另一个表,只有一个记录。但是,如果是一对多的问题,那么在查询的时候可能会出现很怪异的问题。
我们先在xx_b中增加一条记录(name,user_id) values ('e',5)。
mysql> insert into xx_b(name,user_id) values ('e',5);
Query OK, 1 row affected (0.01 sec)
xx_a中符合条件(id>3)的记录有两条:
但是,关联xx_b表的时候,结果就出乎意料了:
事实上,确实应该是3条记录,因为关联的时候xx_b中user_id=5的记录有两个:
但是,我们在实际应用中,希望以左边的表为主表,满足条件的应该是两条,这种因为一对多的关系导致出现了意外,解决办法就是:
1、使用distinct关键字过滤。
2、使用group by语句对结果进行分组。
使用group by语句分组,可以起到去重的功能:
相对来说,使用distinct关键字更简单一些。
创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖以上是关于mysql使用join做update操纵与使用join做查询时出现重复记录的问题的主要内容,如果未能解决你的问题,请参考以下文章
mysql update 的时候使用left join和where语句
mysql update 的时候使用left join和where语句