mysql查找一本书的所有版本,最高版本除外

ryevplcw  于 2021-07-27  发布在  Java
关注(0)|答案(1)|浏览(335)

我有一个如下形式的sql表:

id | bookid | version
1|B1|1
2|B2|1
3|B1|2
4|B1|3
5|B1|4
6|B2|2
7|B3|1

哪里 id 是主键。我想找出所有 id 除最新版本外,每一本书都有。版本列的类型为 bigint . B3 应该从结果中忽略,因为它只有一个版本。
所以基本上我的结果表应该是:

1|B1|1
2|B2|1
3|B1|2
4|B1|3

我的想法:

select id from titles where id not in (
select id, bookid, max(version) from titles group by bookid)

显然上面的查询不起作用。我只需要在我的内部查询中获取id,但是我无法找到groupby和max。上面的查询也没有过滤像b3这样只有一个版本的情况。解决这个问题的方法可能是首先找到所有只有一个版本的id,并让外部查询忽略这些id。

hmmo2u0o

hmmo2u0o1#

exists逻辑提供了一种简明的方法来表述查询:

SELECT id, bookid, version
FROM titles t1
WHERE EXISTS (SELECT 1 FROM titles t2
              WHERE t2.bookid = t1.bookid AND t2.version > t1.version);

用简单的英语阅读,上面的查询表示返回每个记录,这样我们就可以为同一本书找到一些版本号更高的其他记录。请注意,此逻辑因此排除了最高版本的每本书的记录。

相关问题