如何查找未加入的记录?

Six*_*Bit 51 sql select join anti-join

我有两张桌子连在一起.

A有很多B.

通常你会这样做:

select * from a,b where b.a_id = a.id
Run Code Online (Sandbox Code Playgroud)

从b中记录的所有记录中获取记录.

如何获得b中没有任何内容的记录?

alb*_*ein 85

select * from a where id not in (select a_id from b)
Run Code Online (Sandbox Code Playgroud)

或者像这个帖子中的其他人说:

select a.* from a
left outer join b on a.id = b.a_id
where b.a_id is null
Run Code Online (Sandbox Code Playgroud)


Jos*_*son 18

select * from a
left outer join b on a.id = b.a_id
where b.a_id is null
Run Code Online (Sandbox Code Playgroud)


Mon*_*SSI 15

下图将有助于理解 SQL LET JOIN

在此输入图像描述


Mat*_*ton 5

另一种方法:

select * from a where not exists (select * from b where b.a_id = a.id)
Run Code Online (Sandbox Code Playgroud)

如果您需要将其他"where"子句附加到内部查询,则"exists"方法很有用.


one*_*hen 5

SELECT id FROM a
EXCEPT
SELECT a_id FROM b;
Run Code Online (Sandbox Code Playgroud)