我的数据库中有两个表:tweets
和users
中的一个或多个。
在users
表中,我有三列,分别命名为“id
“(用户ID)、“datetime_created_at
“(用户添加到数据库的日期时间)和“datetime_modified_at
“(用户属性修改的最后日期时间)。
在tweets
表中,我有两列:“id
“(推文ID)和“datetime
“(发布此推文的日期时间)。
在users
表中,我在datetime_modified_at
列中为某些用户提供了NULL值,因此,为了填充它,我决定将用户发布的最后一条推文的日期时间(当该值为NULL时)填入该值,但datetime_created_at
确实有一个非NULL值。例如,如果UserA有两条推文,分别为dateA和dateB,并且dateB〉dateA,我希望如下填充NULL值:datetime_modified_at
=日期B。
为此,我编写了以下查询:
update users
set datetime_modified_at = max_datetime
from (
select users.id, max(tweets.datetime) as max_datetime from users
inner join tweets on users.id = tweets.user_id
where users.datetime_created_at is not NULL and users.datetime_modified_at is NULL
group by users.id
) Grouped
where users.datetime_created_at is not NULL and users.datetime_modified_at is NULL
此查询的问题是,符合此条件(where users.datetime_created_at is not NULL and users.datetime_modified_at is NULL
)的每个用户的每个datetime_modified_at
都填充了相同的值(例如“2022-08-03 22:22:42”,而不是每个用户的实际最大日期时间)。
我应该如何编写此查询以获得此结果?
1条答案
按热度按时间ecbunoof1#
试试这个。你应该更新where,先从用户表中选择,然后再内部连接表,这样它就可以更新到相应的id。