我有两张桌子,人物和车辆。车辆属于人。我试图检查一个人是否没有车辆。我试图通过加入人员和车辆,并显示不在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;
答案 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)。