MySQL中UPDATE某个字段通过LEFT JOIN

  •   
  • 2427
  • MySQL
  • 0
  • super_dodo
  • 2020/09/28

最近维护一个老项目,因为之前的表设计是满足之前的项目的。现在项目有改动,需要去做更新。项目逻辑就不一一介绍。现在剥离出其中一个小项。也就是在用户表中附加一个字段,得到这个用户的地址id。之前是地址表中存有用户ID,每次都需要去连表LEFT JOIN,而且有些用户是没有地址的,所以需要这么去判断.

//查询出没有用户地址的用户列表
SELECT * FROM user_list AS A LEFT user_address AS B ON (A.id=B.user_id AND ISNULL(B.id));

数据量大的时候联表查询有性能消耗,尤其是要联表多个的时候。

现在需要在用户表里新增一个字段address_id默认值为0.新增完成后,就需要去更新这个字段。起初笨笨的dodo想写个循环去更新,但是一看数据表几万条,这样太费时费力。

于是可以参考下面的sql语句,一句搞定且高效。

// 更新A表里面的字段,值来自于B表
UPDATE user_list AS A
LEFT JOIN user_address AS B ON A.id = B.user_id
SET A.address_id = IFNULL(B.id,0), A.address_status=IFNULL(B.status,0);

最后很多的方式都可以直接用MySQL来处理。这样很高效也提高了IO。