Problem mit Join-Abfrage über drei Tabellen



  • Hallo,
    ich sitze hier schon seit einiger Zeit an einer Abfrage, die ich so leider nicht ganz hin bekomme. Meine Tabellen im Einzelnen:

    T_SAPDATA:
    ID | MatNr | Datum | Lagerplatz |
    -------------------------------------
    1 |1 | 25.02.2013| A-R01-A10 |
    2 |2 | 25.02.2013| A-R01-A20 |
    3 |3 | 25.02.2013| A-R01-A10 |

    T_MATNR:
    ID | MatNr |
    ------------
    1 |A5001 |
    2 |A5002 |
    3 |A5003 |

    T_INVENTUR:
    ID | MAT_NR | Datum_Invent |
    ----------------------------
    1 |2 | 26.02.2013 |

    Was wird hier gemacht?
    Es werden Datensätze am Stichtag (25.02.2013) aus dem SAP geladen und in die Tabelle T_SAPDATA gefahren. Ein Mitarbeiter hat ab diesem Stichtag Zeit die Bestände zu prüfen. Das Ergebnis dieser Prüfung schreibt er nun in die Tabelle T_INVENTUR. Wie man sehen kann, also einen Tag später.

    Was benötige ich jetzt?
    Ich möchte eine Auflistung der Datensätze, die noch offen zur Prüfung stehen. Also die Materialnummer & Lagerplatz der Materialien, die noch nicht geprüft wurden.

    Ich habe dazu folgende Abfrage:

    select M.MatNr, I.Datum_Invent, S.Lagerplatz from T_MATNR AS M
    left join T_INVENTUR AS I on M.ID = I.MAT_NR
    left join T_SAPDATA AS S on I.MAT_NR = S.MatNr
    where I.Datum_Invent is NULL
    

    Doch leider bekomme ich folgendes Ergebnis:

    MatNr | Datum_Invent| Lagerplatz |
    ----------------------------------------
    A5001 | NULL | NULL |
    A5003 | NULL | NULL |

    Wie bekomme ich denn jetzt noch den Lagerplatz aus Tabelle T_SAPDATA angezeigt???

    Gruß
    Torsten



  • ohne, das was du genau machen willst, komplett zu verstehen, würde ich das mal so ändern:

    select M.MatNr, I.Datum_Invent, S.Lagerplatz from T_MATNR AS M
    left join T_INVENTUR AS I on M.ID = I.MAT_NR
    left join T_SAPDATA AS S on M.ID = S.MatNr
    where I.Datum_Invent is NULL
    

    da I.MAT_NR hier definitiv auch Nullwerte annehmen wird.

    Normalerweise macht man solche Queries heutzutage allerdings mit exists/not exists



  • vielen Dank für die Antwort. Habe meine Abfrage angepasst. Muss ja lauten:

    AS S on M.ID = S.MatNr
    

    Somit zeigt die Abfrage die richtige Daten.

    Gruß
    Torsten


Anmelden zum Antworten