我有两个表:1.聊天(包含聊天的开始日期),2。消息(包含聊天消息的发送日期)。
聊天:
id, start_date
1, 2015-06-01
2, 2014-06-01
3, 2013-06-01
消息:
id, message, sent_on, chat_id
1, messag1, 2015-05-01, 1
2, messag2, 2015-04-01, 1
3, messag3, 2015-03-01, 1
4, messag4, 2015-02-01, 1
5, messag5, 2014-06-01, 2
6, messag6, 2014-06-01, 2
7, messag7, 2014-06-01, 2
8, messag8, 2014-06-01, 2
9, messag9, 2013-04-01, 3
10, messag10, 2013-03-01, 3
11, messag11, 2013-02-01, 3
12, messag12, 2013-01-01, 3
问题是chat_id = 1和3的消息中的记录的sent_on
日期早于chats.id等于1和chats.id等于3。
如何更新chats
表设置的chats.id 1的起始日期等于最早日期的chatsid 1(在本例中为2015-02-01)和chats.id 3的日期最早的日期来自带有chat_id 3的消息(在这种情况下等于2013-01-01)?
答案 0 :(得分:1)
我们可以尝试对子查询进行更新联接,该子查询可以在messages
表中找到每个聊天的最早日期:
UPDATE chats c
INNER JOIN
(
SELECT chat_id, MIN(sent_on) AS min_sent_on
FROM messages
GROUP BY chat_id
) m
ON c.id = m.chat_id
SET
c.start_date = m.min_sent_on;