我正在尝试查找foo
没有任何bar
符合给定条件的记录的所有记录。
create table foo (
id integer
);
create table bar (
foo_id integer,
name varchar(255)
);
insert into foo (id) values (1),(2),(3),(4),(5),(6);
insert into bar (foo_id, name) values
(1,"name1"),
(2,"name1"),
(3,"asd"),
(4,"name2"),
(5,"name2"),
(3,"name1");
Run Code Online (Sandbox Code Playgroud)
基于此 .. 只有记录6
符合条件,因为它没有标记为name1
或name2
。
select
foo.*
from foo
left outer join bar on (foo.id = bar.foo_id)
where
bar.name not in ("name1","name2") or bar.name is null;
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
如果你想坚持使用left join
,应该是这样的。您要排除的条件已放置在left join .. on
零件上,并保留where .. is null
检查:
select
foo.*
from
foo
left outer join bar
on foo.id = bar.foo_id
and bar.name in ('name1', 'name2')
where
bar.name is null ;
Run Code Online (Sandbox Code Playgroud)
也可以通过以下方式完成not exists
:
select
foo.*
from
foo
where
not exists
( select *
from bar
where foo.id = bar.foo_id
and bar.name in ('name1', 'name2')
) ;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7797 次 |
最近记录: |