Sql 如何获得“最大值”;“不存在”;查询

Sql 如何获得“最大值”;“不存在”;查询,sql,sqlite,Sql,Sqlite,我并不擅长SQL,但我正在将它用于一个项目。下面是我想写的查询,但它当然不是有效的SQL select * from a where not exists ( select * from b where a.name = b.name) common where a.id > max(common.id) 我的目标是获取a中未与b中的行连接的行,但仅获取id大于任何连接行的行。这一点是为了让我可以开始用值填充数据库,停止,然后在我结束时继续 我将sqlite与python一起使用

我并不擅长SQL,但我正在将它用于一个项目。下面是我想写的查询,但它当然不是有效的SQL

select * from a
where not exists (
  select * from b
  where a.name = b.name) common
where a.id > max(common.id)
我的目标是获取
a
中未与
b
中的行连接的行,但仅获取id大于任何连接行的行。这一点是为了让我可以开始用值填充数据库,停止,然后在我结束时继续

我将sqlite与python一起使用;我知道我可以用python做两个查询,但我猜有一种方法可以用SQL来做(我认为这样更好)

转储:


还有其他列,因此它们不是相同的表,但是查询应该从表
a

中获取Johnny、James和Bart。下面从
a
中获取大于行
b
中最大对应值的所有行:

select a.*
from a
where a.id > (select max(b.id) from b where a.a_field = b.b_field)
它假设在
b
中至少有一条记录匹配

如果要包含所有值,即使不存在,我认为这样做可以:

select a.*
from a
where a.id > all (select b.id from b where a.a_field = b.b_field)
我提议:

  • 为内部联接创建一个方便的通用表表达式(第一行)
  • 从a中选择所有不在ab中的(第二行和第四行)
  • 根据所需条件进行限制(第三行)
请注意,
ab
中的ID与
a
中与
b
连接的ID相同。因此,它们的最大值是来自哪个连接中的ID的最大值

我只是简单地输出
*
,只使用所需的字段应该很容易

代码:

输出:

20|Johnny
21|James
22|Bart

请在SQLite中提供适当定制的玩具数据库的
.dump
。@Yunnoschedited@CL.最后一句应该足够清楚,不是吗?有趣;很接近,但我认为这不是我想要的。我的问题有点模糊,但我想再次将
a.id
a.id
进行比较,而不是
b.id
。我想我看到了一种通过连接来实现这一点的方法,但我不确定。
with ab(id, field) as (select id, a.name from a join b using(id))
select * from a
where id > (select max(id) from ab)
except select * from ab;
20|Johnny
21|James
22|Bart