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