我有一个名为passive
than 的表,其中包含每个用户的时间戳事件列表。我想填充属性duration
,它对应于当前行的事件和该用户完成的下一个事件之间的时间。
我尝试了以下查询:
UPDATE passive as passive1
SET passive1.duration = (
SELECT min(UNIX_TIMESTAMP(passive2.event_time) - UNIX_TIMESTAMP(passive1.event_time) )
FROM passive as passive2
WHERE passive1.user_id = passive2.user_id
AND UNIX_TIMESTAMP(passive2.event_time) - UNIX_TIMESTAMP(passive1.event_time) > 0
);
这将返回错误消息Error 1093 - You can't specify target table for update in FROM
。
为了规避这个限制,我尝试遵循https://stackoverflow.com/a/45498/395857中给出的结构,它使用 FROM 子句中的嵌套子查询来创建隐式临时表,因此它不会t 算作我们正在更新的同一张表:
UPDATE passive
SET passive.duration = (
SELECT *
FROM (SELECT min(UNIX_TIMESTAMP(passive2.event_time) - UNIX_TIMESTAMP(passive.event_time))
FROM passive, passive as passive2
WHERE passive.user_id = passive2.user_id
AND UNIX_TIMESTAMP(passive2.event_time) - UNIX_TIMESTAMP(passive1.event_time) > 0
)
AS X
);
但是,passive
嵌套子查询中的表passive
与主查询中的表不同。因此,所有行都具有相同的passive.duration
值。如何passive
在嵌套子查询中引用主查询?(或者也许有一些替代方法来构建这样的查询?)