MySQL使用另一列的最大值更新列值

时间:2014-11-17 14:12:16

标签: mysql

我有一个包含2个表的数据库: "服务"和" service_performance" 这两个表有一个SERVICE_ID列。

"服务" SERVICE_ID值是唯一的(每个服务都有一个ID /条目)。 在" service_performance"有一个AVERAGE_MEMORY列,每个service_id有多个条目

我正在尝试更新" services"中的MAX_VALUE列。具有最高AVERAGE_MEMORY值的表来自" service_performance"表

我知道我的查询错误,因为它会抛出错误:

1054 - 未知栏' service_performance.SERVICE_ID'在' where子句'

' service_performance.SERVICE_ID'确实存在。

这是我的问题:

   update _services
set MAX_VALUE = (SELECT MAX(AVERAGE_MEMORY) AS SERVICE_ID FROM service_performance)
where exists 
  (select *
  from services 
  where `services`.`SERVICE_ID` = `service_performance`.`SERVICE_ID`);

3 个答案:

答案 0 :(得分:1)

您应该会发现此版本适用于MySQL:

update services s join
       (select service_id, MAX(AVERAGE_MEMORY) as maxmem
        from service_performance
        group by service_id
       ) sp
       on s.service_id = sp.service_id
    set s.MAX_VALUE = sp.maxmem;

如果where子句中包含正确的表名,那么您的版本将有效:

update services
    set MAX_VALUE = (SELECT MAX(AVERAGE_MEMORY) AS SERVICE_ID
                     FROM service_performance
                     WHERE `services`.`SERVICE_ID` = `service_performance`.`SERVICE_ID`)
    where exists (select *
                  from service_performance 
                  where `services`.`SERVICE_ID` = `service_performance`.`SERVICE_ID`
                 );

我假设update _services是一个拼写错误,应该是update services

答案 1 :(得分:0)

MySQL抱怨,因为在此查询中没有service_performance

试试这样:

   UPDATE _services s INNER JOIN service_performance p
   ON s.SERVICE_ID=p.SERVICE_ID
   SET s.MAX_VALUE=MAX(p.AVERAGE_MEMORY) GROUP BY p.SERVICE_ID

答案 2 :(得分:0)

我没有要测试的数据库,但首先你没有给子查询一个别名,所以它不知道service_performance.Service_ID是什么。

其次,在此上下文中,子查询需要返回单个值而不是表,因此您可能无法引用它。如果向子查询添加别名不起作用,则以下内容应该起作用:

update _services
set MAX_VALUE = (SELECT MAX(AVERAGE_MEMORY) AS SERVICE_ID FROM service_performance
                 INNER JOIN
                 services
                 on services.SERVICE_ID = service_performance.SERVICE_ID)