mysql 在update时候,set字段值是查询出来的。怎么set?

中凯_凯哥java 发布于 2016/08/03 10:50
阅读 1K+
收藏 0

问题描述:

我想在update的时候 set字段的值是从一个select 语句中查询出来的。这样的sql怎么写?

set字段查询如下:

查询登陆次数的sel:

SELECT ual.loginCount loginCount
FROM use_user  m  
LEFT JOIN (SELECT t.user_id userId,COUNT(t.user_id) loginCount FROM use_access_log t
 GROUP BY t.user_id) ual ON ual.userId = m.id
  WHERE 1=1 
    ORDER BY m.registerTime DESC 
  LIMIT 0,2

现在在use_user表中添加了 loginCount这个字段。现在想要把 上面语句查询出来的 loginCount 的结果更新到use_user表中。

查询的loginCount 是多条的。假设是子查询。在更新的时候,更新用户ID。

请问sql怎么写?

加载中
0
中凯_凯哥java
中凯_凯哥java

找到解决办法了:

修改如下:

  UPDATE use_user a INNER JOIN (SELECT ual.loginCount loginCount,m.id AS userId
FROM use_user  m  
LEFT JOIN (SELECT t.user_id userId,COUNT(t.user_id) loginCount FROM use_access_log t
 GROUP BY t.user_id) ual ON ual.userId = m.id
  WHERE 1=1 
    ORDER BY m.registerTime DESC 
  LIMIT 0,2) b ON  a.id = b.userId
  SET a.loginCount = b.loginCount;

其核心:

update A inner join B  on A.userid = B.userid set A.money = A.money+B.money

参考:http://bbs.csdn.net/topics/391903065?page=1


0
o
oneflower
UPDATE use_user a INNER JOIN (SELECT ual.loginCount loginCount,m.id AS userId
FROM use_user  m  
LEFT JOIN (SELECT t.user_id userId,COUNT(t.user_id) loginCount FROM use_access_log t
 GROUP BY t.user_id) ual ON ual.userId = m.id
  WHERE 1=1 
    ORDER BY m.registerTime DESC 
  LIMIT 0,2) b ON  a.id = b.userId
  SET a.loginCount = b.loginCount;
  
除了inner join 的方式,也可以用
update table1 t1, table2 ts …的方式,
也可以使用left join来做多表update;

除了更新一张表,也可以同时更新多张表

参考自:
mysql多表更新(跨表更新)
中凯_凯哥java
中凯_凯哥java
谢谢!
0
火狐斯密达

两个表没有关联关系,就只要值,怎么弄?你的答案都不符合你的题

返回顶部
顶部