Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql UPDATE语句,带有SELECT汇总表2中的数据_Mysql_Sql - Fatal编程技术网

MySql UPDATE语句,带有SELECT汇总表2中的数据

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

我有两个表,表A有列token主键和downtime INT,表B有列token,status ENUM,有3种状态:活动、不稳定、不活动、持续时间INT

我想从表B中求出持续时间的总和,只针对不稳定和不活动的状态。然后,将结果分配到表A中的列downtime

那么比如说,

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);

嗨,谢谢你的回答。这可能很好地解决了问题,但最好添加一些关于您所做更改的解释,以及这可以解决问题的原因。这里有很多新手,他们可以从你的专业知识中学到一两件事。别忘了,对你来说很明显的东西对他们来说可能不是。。。