我有两个表,表A有列令牌(主键)和停机时间(INT
),表B有列令牌< / em>,状态(ENUM
包含3个州:active
,unstable
,inactive
),持续时间( INT
)。
我想从表B中总结持续时间,仅针对状态unstable
和inactive
。然后,将结果分配给表A中的列停机时间。
所以,例如,
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中的新手。任何人都可以帮助我吗?
答案 0 :(得分:1)
在mysql中,您可以使用join和update of something
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
答案 1 :(得分:0)
试试这个:
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
答案 2 :(得分:0)
您在更新中使用子查询的想法很好,您只需要重新组织它:
UPDATE A
SET downtime = (SELECT SUM(duration) FROM B WHERE state != 'active' AND A.token = B.token);