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 LEFT JOIN 删除行

mysql update 的时候使用left join和where语句

mysql update 的时候使用left join和where语句

ORACLE SQL UPDATE 与 INNER JOIN 不起作用

优化MYSQL中的UPDATE JOIN查询。

CMD操纵Mysql命令大全