如何获得最大值"不存在"查询

时间:2017-06-14 17:18:20

标签: 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的行与任何加入的行相比BEGIN TRANSACTION; CREATE TABLE "a" ( `Id` INTEGER NOT NULL UNIQUE, `Name` TEXT, PRIMARY KEY(`Id`) ); INSERT INTO a VALUES(16,'Bob'); INSERT INTO a VALUES(17,'George'); INSERT INTO a VALUES(18,'Jimmy'); INSERT INTO a VALUES(19,'Billy'); INSERT INTO a VALUES(20,'Johnny'); INSERT INTO a VALUES(21,'James'); INSERT INTO a VALUES(22,'Bart'); CREATE TABLE "b" ( `Id` INTEGER NOT NULL UNIQUE, `Name` TEXT NOT NULL, PRIMARY KEY(`Id`) ); INSERT INTO b VALUES(16,'Bob'); INSERT INTO b VALUES(19,'Billy'); COMMIT; 。这样做是为了让我可以开始使用值填充数据库,停止,然后在我离开的地方继续。

我在python中使用sqlite;我知道我可以用python做两个查询,但是我猜测有一种方法可以用SQL来做(而且我假设这样做的更好')

转储:

a

还有其他列,所以这些不是相同的表,但查询应该从表<form id="myForm"> <label for="name" class="sr-only">Name</label> <input type="name" class="form-control" id="name" placeholder="Name"> <button class="btn" id="sendBtn">Submit</button> </form> Hello {{name}} 获得Johnny,James和Bart。

2 个答案:

答案 0 :(得分:1)

我建议:

  • 为内连接(第一行)提供方便的公用表表达式
  • 从不在ab(第二行和第四行)
  • 中选择全部
  • 根据期望条件限制(第三行)

请注意,ab中的ID与a加入b的ID相同。因此,他们的最大值是加入中的ids的最大值。

我只输出*,只使用所需的字段应该很容易。

代码:

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

答案 1 :(得分:0)

以下内容从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)