首页 > 解决方案 > 使用 EXCEPT 或 NOT EXISTS 查找所有租用的卡

问题描述

我的数据库是这样的

CUSTOMER (NAME,VAT,PHONE)
CAR(PLATENR,COLOUR)
RENTS(VAT,PLATENR, RENTDATE)

我要查找的是所有客户租用的所有黑色汽车(所有增值税号)。我想使用嵌套子查询和EXCEPTor NOT EXISTS。我已经使用了这个查询COUNT

SELECT rents.PlateNr
FROM Rents,Car
WHERE Car.colour='black' AND car.PlateNr=rents.PlateNr
GROUP BY rents.PlateNr
HAVING COUNT(DISTINCT VAT) = (SELECT COUNT(*) FROM Customer);

我正在尝试使用本指南http://www.inf.usi.ch/faculty/soule/teaching/2016-fall/db/division.pdf来获得我的结果,但我不知道查询是如何实现的我的情况。

标签: sql

解决方案


我正在寻找类似于我上面提供的关于除法的链接的答案。

经过一番搜索并尝试使用 except 的最终除法查询是这样的:

SELECT PlateNr
FROM Car
WHERE colour='black' 
EXCEPT
    SELECT PlateNr
    FROM (SELECT car.PlateNr, rents.VAT
        FROM car,rents
        EXCEPT
            SELECT PlateNr,VAT
            FROM rents)

已经在支持 EXCEPT 的 POSTGRE 中尝试过,一切都像魅力一样。


推荐阅读