Microsoft Access:过滤掉有故障的电影和已租借的电影

时间:2016-04-10 02:24:29

标签: ms-access ms-access-2016

我有一个电影业务数据库,它有DVD表(DVDID,标题,故障)和租赁表(RentalID,MemberID,DVDID,DateRented,DateReturned)。

我想制作一个查询,以确定哪些电影可供租用。要做到这一点,它需要排除DVD表中有故障的DVD,以及尚未在Rental表中返回的DVD。

当“故障”中有内容时,已知DVD存在故障。 DVD表中的列。如果该字段为空,则DVD没有故障。当“DateReturned”中有内容时,已知会返回DVD。租赁表的字段。

到目前为止,我已成功排除了有故障的DVD并在Rental表中排除了DVD,但这需要进行改进,因此如果DateReturned字段为Null,它只会在Rental表中排除DVD。

SELECT DVD.DVDID, DVD.Title, DVD.Rating, DVD.Genre, DVD.Released, DVD.RentalPeriod, DVD.Distributor, DVD.Faults
FROM DVD
WHERE (((DVD.Faults) Is Null) AND ((Exists (SELECT 1 FROM Rental WHERE Rental.DVDID = DVD.DVDID))=False));

任何人都有任何想法如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

假设这会显示已经租借但尚未退回的DVD ......

SELECT DVDID
FROM Rental
WHERE DateReturned Is Null;

将其用作子查询并LEFT JOIN表示DVD

SELECT
    DVD.DVDID,
    DVD.Title,
    DVD.Rating,
    DVD.Genre,
    DVD.Released,
    DVD.RentalPeriod,
    DVD.Distributor,
    DVD.Faults
FROM
    DVD
    LEFT JOIN
        (
            SELECT DVDID
            FROM Rental
            WHERE DateReturned Is Null
        ) AS sub
        ON DVD.DVID = sub.DVID
WHERE
        DVD.Faults Is Null
    AND sub.DVID Is Null;

WHERE条款中,DVD.Faults Is Null排除了有错误的条款,sub.DVID Is Null排除了已租借但未归还的条款。