2016-04-10 4 views
1

Ich habe eine Datenbank für ein Filmgeschäft, die eine DVD-Tabelle (DVDID, Titel, Fehler) und eine Vermietungstabelle (RentalID, MemberID, DVDID, DateRented) hat , DateReturned).Microsoft Access: Filme mit Fehlern filtern und bereits gemietete Filme

Ich möchte eine Abfrage machen, die bestimmen wird, welche Filme zur Miete verfügbar sind. Dazu müssen DVDs mit Fehlern in der DVD-Tabelle und DVDs, die nicht in der Tabelle "Vermietung" zurückgegeben wurden, ausgeschlossen werden.

Es ist bekannt, dass DVDs einen Fehler aufweisen, wenn Inhalt in der Spalte "Fehler" in der DVD-Tabelle vorhanden ist. Wenn das Feld leer ist, hat die DVD keinen Fehler. Es ist bekannt, dass DVDs zurückgegeben werden, wenn Inhalt im Feld "DateReturned" der Miettabelle vorhanden ist.

Bisher konnte ich DVDs mit Fehlern ausschließen und DVDs in der Tabelle Vermietung ausschließen, aber dies muss verbessert werden, so dass nur DVDs in der Tabelle Rental ausgeschlossen werden, wenn das Feld DateReturned Null ist.

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)); 

Wer hat irgendwelche Ideen, wie ich das erreichen könnte?

Antwort

0

Angenommen, dies zeigt Ihnen die DVDs, die gemietet haben, aber noch nicht zurückgekehrt ...

SELECT DVDID 
FROM Rental 
WHERE DateReturned Is Null; 

verwenden, die als Unterabfrage und LEFT JOIN Ihre DVD Tabelle zu.

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; 

In der WHERE Klausel, DVD.Faults Is Null schließen solche mit Fehlern und sub.DVID Is Null schließen solche, die gemietet wurden und nicht zurückgegeben.

+1

Vielen Dank für die Antwort, funktioniert perfekt! – Crashbash111