MySql UPDATE语句,带有SELECT汇总表2中的数据
我有两个表,表A有列token主键和downtime INT,表B有列token,status ENUM,有3种状态:活动、不稳定、不活动、持续时间INT 我想从表B中求出持续时间的总和,只针对不稳定和不活动的状态。然后,将结果分配到表A中的列downtime 那么比如说,MySql UPDATE语句,带有SELECT汇总表2中的数据,mysql,sql,Mysql,Sql,我有两个表,表A有列token主键和downtime INT,表B有列token,status ENUM,有3种状态:活动、不稳定、不活动、持续时间INT 我想从表B中求出持续时间的总和,只针对不稳定和不活动的状态。然后,将结果分配到表A中的列downtime 那么比如说, TABLE A ======= token downtime -------------------------- bv87pxicnrtk8pw null v3525kq2kzihb
TABLE A
=======
token downtime
--------------------------
bv87pxicnrtk8pw null
v3525kq2kzihb9u null
TABLE B
=======
token state duration
------------------------------------------
v3525kq2kzihb9u active 9
v3525kq2kzihb9u unstable 20
v3525kq2kzihb9u inactive 60
bv87pxicnrtk8pw unstable 11
bv87pxicnrtk8pw active 140
bv87pxicnrtk8pw inactive 40
RESULT
======
token downtime
--------------------------
bv87pxicnrtk8pw 51
v3525kq2kzihb9u 80
我试过了
UPDATE A
SET downtime = (SELECT SUM(duration) FROM B WHERE state != 'active' GROUP BY token)
WHERE A.token = B.token;
但是没有成功
SQL新手。有人能帮我吗?在mysql中,您可以使用join并按如下方式更新某些内容
update tablea a
join(
select
token,sum(duration) as duration from tableb
where state != 'active'
group by token
)b
on b.token = a.token
set a.downtime = b.duration
试试这个:
UPDATE A a
INNER JOIN (
SELECT SUM(duration) AS s
FROM B
WHERE state <> 'active'
GROUP BY token
) b ON a.token = b.token
SET a.downtime = b.s
您在更新中使用子查询的想法很好,您只需要重新组织它:
UPDATE A
SET downtime = (SELECT SUM(duration) FROM B WHERE state != 'active' AND A.token = B.token);
嗨,谢谢你的回答。这可能很好地解决了问题,但最好添加一些关于您所做更改的解释,以及这可以解决问题的原因。这里有很多新手,他们可以从你的专业知识中学到一两件事。别忘了,对你来说很明显的东西对他们来说可能不是。。。