我有一个包含2个表的数据库: "服务"和" service_performance" 这两个表有一个SERVICE_ID列。
"服务" SERVICE_ID值是唯一的(每个服务都有一个ID /条目)。 在" service_performance"有一个AVERAGE_MEMORY列,每个service_id有多个条目
我正在尝试更新" services"中的MAX_VALUE列。具有最高AVERAGE_MEMORY值的表来自" service_performance"表
我知道我的查询错误,因为它会抛出错误:
' 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`);
答案 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)