SQL-基于另一个查询的值更新列

SQL-基于另一个查询的值更新列,sql,sqlite,Sql,Sqlite,对SQL来说仍然是新手。我的目标是找到最后一个时间戳事件,并更新每个用户的最后一个会话列。我创建了一个查询,可以找到数据库中每个用户的最后一个时间戳。然后我想根据属性\u用户\u id 我目前正在运行SQLite3,所有3列都定义为Varchar(255) 这是我试图运行的代码 UPDATE tb1 SET tb1.property_last_session_date = tt1.property_timestamp FROM tableEvents tb1 JOIN (SELE

对SQL来说仍然是新手。我的目标是找到最后一个时间戳事件,并更新每个用户的最后一个会话列。我创建了一个查询,可以找到数据库中每个用户的最后一个时间戳。然后我想根据
属性\u用户\u id

我目前正在运行SQLite3,所有3列都定义为Varchar(255)

这是我试图运行的代码

UPDATE tb1
SET
    tb1.property_last_session_date = tt1.property_timestamp
FROM tableEvents tb1
JOIN
    (SELECT tb2.property_user_id, MAX(tb2.property_timestamp)
    FROM tableEvents tb2
    GROUP BY tb2.property_user_id) tt1
ON tb1.property_user_id = tt1.property_user_id
谢谢你的帮助

UPDATE tb1
SET tb1.property_last_session_date = 
    (SELECT tt1.property_timestamp 
     FROM (SELECT tb2.property_user_id, MAX(tb2.property_timestamp) as property_timestamp
           FROM tableEvents tb2
           GROUP BY tb2.property_user_id) tt1
     WHERE tb1.property_user_id = tt1.property_user_id);
它被称为相关子查询,您可以在选择、更新、删除中使用它

请注意,此子查询针对tb1的每一行执行

然而,MySQL应该足够聪明,只执行一次tt1

此查询将更新tb1中的所有行。tb1.property\u user\u id为null的行可能存在一些问题(tb1.property\u last\u session\u date将设置为null)


您好,Multisync,我尝试了上面的语句,得到了一个“.”语法错误。我正在使用SQLite Expert Personal对数据库运行查询。@ETam可能是“MAX(tb2.property\u timestamp)property\u timestamp”的问题。我在max和alias之间添加了AS,不幸的是,它不起作用。仍然得到相同的语法错误?@ETam抱歉,看来sqlite3有一些限制。我在回答中添加了一个额外的更新。也许会有帮助
UPDATE tb1
SET property_last_session_date = 
    (SELECT prop_time
     FROM (SELECT property_user_id as user_id, MAX(property_timestamp) as prop_time
           FROM tableEvents tb2
           GROUP BY property_user_id) tt1
     WHERE tt1.user_id = property_user_id);