不知道这是否可能…我在用sqlite3
架构:
创建表文档(id整数主键,名称字符串);
创建表revs(id integer主键,doc_id integer,number integer);
我想选择每一个只有一个修订的工作,一个最高的数字。我怎样才能做到这一点?
现在我正在做一个左连接并获取所有内容,然后在应用程序中过滤它,但是这很糟糕。
(顺便说一句,你能给我推荐一本关于数据库及其工作原理的简单易懂的入门书吗,也许还有一些关于sql的东西……)
谢谢!

最佳答案

不确定您的引擎是否支持此功能,但通常情况下,您会在ansi sql中执行以下操作:

SELECT docs.*
    ,revs.*
FROM docs
INNER /* LEFT works here also if you don't have revs */ JOIN revs
    ON docs.id = revs.doc_id
    AND revs.number IN (
        SELECT MAX(number)
        FROM revs
        WHERE doc_id = docs.id
    )

使用公共表表达式、相关聚合子查询等,有很多方法可以编写等效查询。

10-08 15:12