我有2张桌子。一个是people
,其中包含名称,ssn等。另一个是cars
,其中包含ssn,make,model等。
如何从people
表中选择ssn列与cars
表中的任何ssn不匹配?
组合表有ssn, name, etc, carssn, carid
,并且当表连接时,cars
表上没有ssn的任何人对这两列都有NULL。
答案 0 :(得分:4)
我会使用not exists
:
select p.*
from people p
where not exists (select 1 from cars c where c.ssn = p.ssn);
答案 1 :(得分:0)
我会使用not in
:
select *
from people
where ssn not in (select ssn from cars);
如果您想使用联接,请按照问题中的说明使用is null
:
select p.*
from people p
left join cars c using (ssn)
where c.ssn is null;
答案 2 :(得分:0)
也可以使用ALL
select *
from people
where ssn != ALL(select ssn from cars);
如果ssn
中的cars
永远不是NULL
。如果ssn
有时NULL
比您使用<{p}}
select *
from people
where ssn != ALL(select ssn from cars where ssn IS NOT NULL);
您应该使用NULL
NOT IN