使用“除”或“不存在”来查找所有租借的卡

时间:2018-11-27 21:48:08

标签: sql

我的数据库就是这样

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

我想找到的是所有客户租用的所有黑色汽车(所有增值税号)。 我想使用嵌套的子查询和EXCEPTNOT 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来获得结果,但是我不了解在我的情况下如何实现查询。

1 个答案:

答案 0 :(得分:0)

我正在寻找一个与我上面提供的有关除法的链接相似的答案。

经过一些搜索并尝试使用除以下方式进行的最终除法查询:

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中进行了尝试,并且一切工作都像一个魅力。