正确的使用方式" NOT IN" Postgres的

时间:2015-01-05 16:40:51

标签: sql postgresql

我有两张桌子,人物和车辆。车辆属于人。我试图检查一个人是否没有车辆。我试图通过加入人员和车辆,并显示不在Vehicles.person_id中的人员身份来做到这一点。

这没有任何回报,让我想知道我做错了什么,或者是否有更有效的方法。

查询在

下面

Select People.id From People INNER JOIN Vehicles on People.id=Vehicles.person_id where People.id NOT IN Vehicles.person_id;

4 个答案:

答案 0 :(得分:2)

使用左连接找出没有车辆的人

  Select distinct People.id 
  From People 
  LEFT JOIN Vehicles on        People.id=Vehicles.person_id 
  where Vehicles.person_id is NULL

答案 1 :(得分:2)

NOT IN可以有issues with NULL values,如果子查询非常大,performance reasons可能应该避免使用。{/ p>

尝试NOT EXISTS

SELECT p.id
FROM People p
WHERE NOT EXISTS (
    SELECT 1 
    FROM Vehicles v
    WHERE v.person_id = p.id)

答案 2 :(得分:1)

另一种解决方案,使用集合:

Select id From People
except
SELECT person_id FROM Vehicles

答案 3 :(得分:0)

使用子查询如下:

Select id 
From People
WHERE id NOT IN (SELECT distinct person_id
                 FROM Vehicles 
                 WHERE  person_id IS NOT NULL)

选择所有不在(Select id From People WHERE id NOT IN之内)所有拥有车辆的人员列表SELECT distinct person_id FROM Vehicles的人(如果您愿意,可以在这里避免使用null)。