我对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。
答案 0 :(得分:1)
我建议:
请注意,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)