Hallo,
ich habe eine Abfrage aus 4 Tabellen gemacht, welche bei meiner Web-Anwendung zu einem Timeout führt. Somit ist der Fehler gefunden... schlechte Abfrage
Leider habe ich noch keinen besseren Weg gefunden. Vielleicht kann mir hier jemand helfen.
Ausgangslage:
MSSQL 2000
4 Tabellen (Anfangsbestand, Einkauf, Verbrauch, Endbestand)
Anfangsbestand (ab_artikel, ab_charge, ab_lager, ab_menge, ab_preis)
Einkauf (ek_artikel, ek_charge, ek_lager, ek_menge, ek_preis)
Verbrauch (vb_artikel, vb_charge, vb_lager, vb_menge, vb_preis)
Endbestand (eb_artikel, eb_charge, eb_lager, eb_menge, eb_preis)
Ich lese 4 Dateien in die Datenbank ein um zu überprüfen ob die darin enthaltenen Daten auch korrekt sind.
AB = Tabelle Anfangsbestand
EK = Tabelle Einkauf
VB = Tabelle Verbrauch
EB = Tabelle Endbestand
Welche Kombinationen sind erlaubt.
AB - VB - EB
AB - VB
AB - EB
EK - VB - EB
EK - VB
EK - EB
Die Werte artikel, charge und lager definieren meine Schlüssel.
Meine Ausgabe sollte wie folgt aussehen, da ich diese Werte wieder in eine andere Tabelle schreibe.
ab_artikel, ab_charge, ab_lager, ab_menge, ab_preis, ek_menge, ek_preis, vb_menge, vb_preis, eb_menge, eb_preis
Wenn artikel, charge und lager in einer Tabelle nicht vorkommen soll einfach eine 0 drin stehen.
ich habe das so gemacht....
zB für den Fall AB - EB
..... usw für alle möglichen fälle.
Umständlicher kann man das vermutlich nicht machen aber ich komme hier einfach nicht weiter.
Bitte helft mir. Ich habe es schon mit JOIN's versucht aber ich möchte ja auch eine 0 stehen haben wenn ich keinen Wert in einer Tabelle finde.
Habe sehr wenig Erfahrung mit JOINS und dieses Problem hier beschäftigt mich wirklich schon länger.
lg
MIK
ich habe eine Abfrage aus 4 Tabellen gemacht, welche bei meiner Web-Anwendung zu einem Timeout führt. Somit ist der Fehler gefunden... schlechte Abfrage
Leider habe ich noch keinen besseren Weg gefunden. Vielleicht kann mir hier jemand helfen.
Ausgangslage:
MSSQL 2000
4 Tabellen (Anfangsbestand, Einkauf, Verbrauch, Endbestand)
Anfangsbestand (ab_artikel, ab_charge, ab_lager, ab_menge, ab_preis)
Einkauf (ek_artikel, ek_charge, ek_lager, ek_menge, ek_preis)
Verbrauch (vb_artikel, vb_charge, vb_lager, vb_menge, vb_preis)
Endbestand (eb_artikel, eb_charge, eb_lager, eb_menge, eb_preis)
Ich lese 4 Dateien in die Datenbank ein um zu überprüfen ob die darin enthaltenen Daten auch korrekt sind.
AB = Tabelle Anfangsbestand
EK = Tabelle Einkauf
VB = Tabelle Verbrauch
EB = Tabelle Endbestand
Welche Kombinationen sind erlaubt.
AB - VB - EB
AB - VB
AB - EB
EK - VB - EB
EK - VB
EK - EB
Die Werte artikel, charge und lager definieren meine Schlüssel.
Meine Ausgabe sollte wie folgt aussehen, da ich diese Werte wieder in eine andere Tabelle schreibe.
ab_artikel, ab_charge, ab_lager, ab_menge, ab_preis, ek_menge, ek_preis, vb_menge, vb_preis, eb_menge, eb_preis
Wenn artikel, charge und lager in einer Tabelle nicht vorkommen soll einfach eine 0 drin stehen.
ich habe das so gemacht....
zB für den Fall AB - EB
Code:
Select ab_artikel, ab_charge, ab_lager, '0' as ek_menge, '0' as ek_preis, '0' as vb_menge, '0' as vb_preis, eb_menge, eb_preis From anfangsbestand, endbestand Where ab_artikel = eb_artikel and ab_charge = eb_charge and ab_lager = eb_lager and ab_charge not in (select ek_charge from einkauf) and ab_charge not in (select vb_charge from verbrauch) UNION ALL
Umständlicher kann man das vermutlich nicht machen aber ich komme hier einfach nicht weiter.
Bitte helft mir. Ich habe es schon mit JOIN's versucht aber ich möchte ja auch eine 0 stehen haben wenn ich keinen Wert in einer Tabelle finde.
Habe sehr wenig Erfahrung mit JOINS und dieses Problem hier beschäftigt mich wirklich schon länger.
lg
MIK
Comment