1

我有一个电影业务数据库,其中有一个 DVD 表(DVDID、Title、Faults)和一个租赁表(RentalID、MemberID、DVDID、DateRented、DateReturned)。

我想进行一个查询,以确定哪些电影可供租用。为此,它需要排除 DVD 表中存在故障的 DVD,以及租赁表中尚未归还的 DVD。

当 DVD 表中的“故障”列中有内容时,已知 DVD 存在故障。如果该字段为空,则 DVD 没有故障。已知当租赁表的“归还日期”字段中有内容时,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));

任何人有任何想法我可以如何做到这一点?

4

1 回答 1

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不包括已租用未归还的。

于 2016-04-10T03:02:51.833 回答