2016-06-11 61 views
1

SQL - 查找所有者没有任何租车的记录。 我已经得到了以下(在MS Access):SQL - 查找记录,其中id不存在/具有任何

Car_Owner 
+----+------+---------+--------+ 
| id | name | Car reg | Rental | 
+----+------+---------+--------+ 
| 1 | Adam | ABC123 | True | 
+----+------+---------+--------+ 
| 2 | John | XXX111 | True | 
+----+------+---------+--------+ 
| 2 | John | XXX222 | False | //Same person as above 
+----+------+---------+--------+ 
| 3 | Eva | YYY999 | False | 
+----+------+---------+--------+ 

我如何找出谁不到风度租什么车?在这种情况下,只是伊娃。约翰不应该因为他已经租了一辆汽车而被列入名单。

任何帮助将不胜感激。

回答

4

一种方法是使用聚合:

select name 
from car_owner 
group by name 
having sum(iif(rental, 1, 0)) = 0; 

您还可以检查该值始终为假做:

having max(rental) = 0 and min(rental) = 0 
+0

感谢那些工作:) BTW我怎么可以用 “SELECT COUNT(ID)”?简单地把一个“数”给我错误的价值,让人困惑。 – Nyprez

+0

@Nyprez。 。 。您的评论似乎与问题或答案无关,因为它们中都没有“count()”。我建议你再问一个问题。 –

+0

不用担心我解决了它:)我只是好奇,这就是为什么我问,但它与我真正的问题无关,所以我没有提到它。 – Nyprez

1
Select * from Car_Owner 
Where Rental = False 
    and Id Not In 
     (Select Id from Car_Owner Where Rental = True) 
1
select * from car_owner 
where name not in (select name from car_owner where rental = True); 
1

下面SQL可以帮助你太:

SELECT * 
FROM Car_Owner 
WHERE Rental = False 
     AND id NOT IN (SELECT id 
         FROM Car_Owner 
         WHERE Rental = True) 

OR

SELECT * 
FROM Car_Owner a 
WHERE Rental = False 
     AND NOT EXISTS (SELECT id 
         FROM Car_Owner b 
         WHERE b.Rental = True 
           AND b.id = a.id) 
+0

谢谢!第二个解决方案很有趣。 – Nyprez