Sql 如何获得“最大值”;“不存在”;查询
我并不擅长SQL,但我正在将它用于一个项目。下面是我想写的查询,但它当然不是有效的SQLSql 如何获得“最大值”;“不存在”;查询,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一起使用
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