2012-10-04 88 views
0

所以我想在一列中搜索最大時間:SQL SELECT給出另一個查詢

sqlite> SELECT max(strftime('%Y-%m-%d %H:%M',time)) FROM posts WHERE thread_id=123456; 
2012-10-02 02:31 

對於每個THREAD_ID這個查詢返回:

sqlite> SELECT thread_id FROM threads WHERE out_of_date=0; 
111 
123 
187 
... 

然後我想搜索對於last_post字段與第一個查詢返回的time字段不匹配並將out_of_date字段設置爲1的所有線程:

sqlite> UPDATE threads SET out_of_date=1 WHERE thread_id=123456 AND last_post!='2012-10-02 02:31'; 

問題是,我不太確定我應該如何組合這三個單獨的查詢。有什麼想法嗎?

回答

1

以下SQL應正確更新線程表。它使用相關的子查詢來組合第1個和第3個查詢。這可以通過添加WHERE子句與第二個查詢結合使用。

UPDATE threads T 
SET out_of_date = 1 
WHERE out_of_date = 0 
    AND last_post != (
     SELECT MAX(strftime('%Y-%m-%d %H:%M',time)) 
     FROM posts 
     WHERE thread_id = T.thread_id 
    ) 
; 
+0

優秀!非常感謝!順便說一下,你的意思是單獨放置'strftime'嗎?這似乎是要求選擇不存在的strftime列的最大值。 – wrongusername

+0

@wrongusername我用一個名爲'strftime'的列對它進行了測試,但忘了在答案中改變它!感謝您指出了這一點。 – acatt