SQL select给出了另一个查询

时间:2012-10-04 21:15:57

标签: sql sqlite

所以我想在一列中搜索最长时间:

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 个答案:

答案 0 :(得分:1)

以下SQL应该正确更新线程表。它使用相关的子查询来组合第一个和第三个查询。然后,可以通过添加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
    )
;