[ACCESS] Daten abfragen, die in Tabelle 2 nicht erfasst wurden



  • Moin Moin allerseits!

    Ich wollte mit Access eine Abfrage starten, die abfragt welche Personalnummern der Tabelle Person nich in der Tabelle Gespräch auftauchen.
    Hierfür hab ich 3 Tabellen:

    Tabelle Email:
    PersNr - Zahl primarykey
    Addy- Text

    Tabelle Person:
    PersNr - Zahl primarykey
    Vorname - Text
    Nachname - Text
    ...

    Tabelle Gespraech
    GespraechID - Zahl primarykey
    Datum - Datum/Uhrzeit
    PersNr - Zahl

    Ich habe jetzt folgenden SQL Code, um mein Problem zu lösen:

    SELECT DISTINCT Person.PersNr, Person.Vorname, Person.Nachname, Email.Addy
    FROM (Person 
    INNER JOIN Gespraech ON Person.PersNr<>Gespraech.PersNr) 
    INNER JOIN Email ON Person.PersNr=Email.PersNr;
    

    Wenn ich eine Menge von Personen habe, aber nur ein Teil dieser Personen mit der PersNr in der Tabelle Gespraech auftaucht, funktioniert der Code auch einwandfrei. Aber, sollten alle Personen bereits ein Gespräch geführt haben, erhalte ich KEINE leere Tabelle zurück, wie man es eigentlich vermuten sollte, sondern ich erhalte ALLE Personen.

    Ist das ein Fehler von Access, oder ist der Code einfach nur totaler Müll?

    MfG

    Vic



  • INNER JOIN Gespraech ON Person.PersNr<>Gespraech.PersNr)
    

    Hier selektierst Du einen INNER-JOIN über alle ungleichen Personalnummern. Damit ist das Ergebnis sowieso hinfällig. Auch die scheinbar richtigen Resultsets dürften sich, bei näherer Betrachtung, als falsch herausstellen.

    Statt dessen einfach eine entsprechende WHERE-Klausel einfügen.

    WHERE NOT (Person.PersNr IN (SELECT PersNr FROM Gespraech))
    

    Möglicherweise ist eine EXISTS-Abfrage schneller, einfach mal ausprobieren.



  • Danke
    jetzt funktioniert es!

    Für alle die ein ähnliches Problem haben, das ist der Code 😉

    SELECT DISTINCT Person.PersNr, Person.Vorname, Person.Nachname, Email.Addy
    FROM Person, Gespraech, Email
    WHERE NOT (Person.PersNr IN (SELECT PersNr FROM Gespraech)) AND
    Email.PersNr = Person.PersNr;
    

    MfG

    Vic


Anmelden zum Antworten