2010-03-08 46 views
0

考虑下表:更新最后一个子ID用mysql

主题

ID,last_updated_child_id

响应

ID,topic_id,的updated_at

我如何更新主题表,以便last_updated_child_id等于最新的响应ID(基于日期)。

因此,例如给出:

 
Topic 
id last_updated_child_id 
-- ----------------------- 
1 null 
2 null 
3 null 

Response 
id topic_id updated_at 
-- ----  ---- 
1 1   2010 
2 1   2012 
3 1   2011 
4 2   2000 

我想执行UPDATE语句将导致表主题之中:

 
id last_updated_child_id 
-- ----------------------- 
1 2 
2 4 
3 null 

注:我想避免临时表,如果可能并且很高兴为MySQL特定的解决方案。

回答

1

效率不高,但相对简单:

UPDATE topic 
SET last_id = (SELECT id 
        FROM  response 
        WHERE topic_id = topic.id 
        ORDER BY updated_at DESC 
        LIMIT 1); 
+0

它不是那么容易习惯具有与MSSQL背景 –

+0

缺乏'LIMIT'是一件事,让我生气的子查询的人的限制在MSSQL中最多。不过,在这种情况下,我想'TOP(1)'会在那里工作。 –

+0

不在mssql中,您不允许在子查询中使用“TOP”,这是后面真正的痛苦。 –