首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL -基于来自另一个查询的值更新列

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

Stack Overflow用户
提问于 2014-11-05 04:56:36
回答 1查看 568关注 0票数 0

对SQL来说还是个新手。我的目标是找到最后一个时间戳事件,并更新每个用户的最后一个会话列。我创建了一个查询,该查询能够找到数据库中每个用户的最后一个时间戳。然后我想根据property_user_id更新property_last_session_date

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

这是我正在尝试运行的代码。

代码语言:javascript
运行
复制
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

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2014-11-05 05:02:59

代码语言:javascript
运行
复制
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);

它被称为相关子查询,您可以在SELECT、UPDATE、DELETE中使用它。

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

但是,MySQL应该足够智能,以便只执行一次tt1。

此查询将更新tb1中的所有行。tb1.property_user_id为null (tb1.property_last_session_date将被设置为NULL)的行可能会出现一些问题

代码语言:javascript
运行
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26744871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档