从mysql中的子查询中的更新表访问列

时间:2015-04-24 05:33:49

标签: mysql database

我有2个表,“位置”和“发生”。 occurrence存储事件,具有creatorId和时间戳。我正在尝试从发生时间戳的5分钟内从位置计算所有时间戳的位置表的平均纬度,并将其放在发生纬度列中。

我已经尝试了下面的内容,并在'where子句'中获得了一个“未知列'events.creatorId'。

update occurrence set latitude = (
select avg(latitude) from (
select * from location where (
location.creatorId=occurrence.creatorId
and location.timestamp<occurrence.timestamp+interval 5 minute
and location.timestamp>occurrence.timestamp-interval 5 minute
)
) as test
);

我的怀疑是我试图写得太像Java程序了。有人可以帮助我的大脑变得更像MySQL吗?

谢谢! 巴格

2 个答案:

答案 0 :(得分:0)

请改为尝试:

update o
set latitude = (select avg(latitude)
                from location
                where location.creatorId=o.creatorId
                and location.timestamp<o.timestamp+interval 5 minute
                and location.timestamp>o.timestamp-interval 5 minute)
from occurrence o

您收到错误“unknown column'insvent.creatorId'”,因为您的最里面的子查询无法访问表的出现。因此,子查询中对出现表中的列的所有引用都是无效的。上面的查询应该可行。

答案 1 :(得分:0)

试试这个。

update occurance o 
set o.latitude = (select avg(l.latitude) 
                   from location l where o.creatorId=l.creatorId 
                   and l.timestamp between o.timestamp-interval 5        
                   minute and o.timestamp+interval 5 minute)