首页 > 解决方案 > 获取多个表的最大值

问题描述

在我的 SQLite 数据库中,每个表中都有一sync_id列。我经常想检索sync_id每个表的最大值。这是我首先尝试的:

SELECT
    MAX(answer.sync_id),
    MAX(community.sync_id),
    MAX(question.sync_id),
    MAX(topic.sync_id)
FROM
    answer,
    community,
    question,
    topic;

这个查询花了很长时间,我实际上从未完成它。

这是我接下来尝试的:

SELECT "answer" AS name, MAX(answer.sync_id) AS max_sync_id FROM answer
    UNION SELECT "community" AS name, MAX(community.sync_id) AS max_sync_id FROM community
    UNION SELECT "question" AS name, MAX(question.sync_id) AS max_sync_id FROM question
    UNION SELECT "topic" AS name, MAX(topic.sync_id) AS max_sync_id FROM topic;

这个速度非常快,给了我预期的结果。


我对此有两个问题:

标签: sqlsqlite

解决方案


1/ 为什么查询如此不同

因为第一个在对它运行之前将一个大表作为 4 个表的笛卡尔积select,而第二个在将结果聚合为 4 行之前每个表触发 1 个请求。两个请求的执行计划都可以详细说明。

2/ 有没有办法以第二次查询的速度获得第一次查询的结果集?

不,这是因为您的数据的性质:似乎您的 4 个表无论如何都不相关,因此您不能有一个(快速)请求来全部命中它们。最好的方法可能是发出 4 个请求,并将结果分组到您的应用程序中。


推荐阅读