PL/SQL,Oracle8 Datensätze werden nicht angezeigt

Hy!
Ich bin neu hier im Forum und grüße erstmal alle. Ich muß im Sql eine Umsatzliste(laufendes Jahr) für diverse Artikel programmieren. Ich war auch schon halbwegs erfolgreich nur habe ich folgendes Problem: Ich muss alle Artikel anzeigen lassen, auch wenn dieses Jahr nix davon verkauft wurde. In der Ausgabe bringt er mir aber nur Artikel, die bisher auch verkauft wurden. Habe schon einiges probiert und hoffe das mir hier jemand weiterhelfen kann. Ich arbeite mit dem PL/SQL und Oracle 8. Hier noch meine Abfrage:

select a.arnr as Artikelnummer, a.arbe as Artikelbeschreibung, b.me11 as Menge_Nov, b.vk11 as Verkauf_Nov, c.effb as Lagerbestand, b.meges as Menge_Jahr, b.vkges Verkauf_Jahr, b.gsart as Geschäftsart, c.lanr as Lagernummer, b.jahr
from t051art a, t158arst b, t075lag c
where a.manr=1
AND a.manr=b.manr(+)
AND a.manr=c.manr
AND a.arnr=b.arnr(+)
AND a.arnr=c.arnr
AND a.krnr=b.lief(+)
AND b.lanr=c.lanr
AND a.krnr=‚65014‘
AND b.jahr=‚2006‘
order by a.arnr

Die Felder der Datensätze die nicht angezeigt werden sind fast alle leer.

Danke schonmal im Voraus!
Gruß

Hi,

mit Outerjoins geht die Sache im Prinzip auch - ich persönlich versuche aber sowas immer zu vermeiden.

Ggfls. bietet sich hier an Sub-Selects zu machen wie z.B.

SELECT x.name,x.irgendwas, (SELECT SUM(y.zahl) FROM tabelle y WHERE y.id = x.id)
FROM tabelle x
WHERE

Soetwas in dem Stil halt.

Bei Out-Joins bin ich auch immer am Rumprobieren, bis es wirklich klappt.

Was mir in Deinem Select auffiel, das die letzte Zeile glaub´ ich so lauten müsste, da „b.jahr“ durch den Outer-Join evtl. ja nicht gefunden wird.

AND NVL(b.jahr,‚2000‘) =‚2006‘

hoffe es hilft ein wenig.

Gruß
Andreas

Du hast zwischen Tabelle a und b Outerjoins und zwischen a un c nicht, also fehlen alle Artikel die keinen Eintrag in c haben.

Falls Du mit den Outerjons Probleme bekommst, was bei mehreren Tabellen passieren kann, gibt es noch die Möglichkeit Funktionen zu schreiben. Das ist zwar viel langlamer, aber machmal nicht zu ändern.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi

Du hast zwischen Tabelle a und b Outerjoins

de facto hat er keinen outer join:

AND b.jahr=‚2006‘

macht den ‚beinahe outer join‘ kaputt

das müsste heissen

and b.jahr (+) = '2006'

oder

and (b.jahr = '2006' or b.jahr is null)

oder

and nvl(b.jahr, '2006') = '2006'

Falls Du mit den Outerjons Probleme bekommst, was bei mehreren :Tabellen passieren kann, gibt es noch die Möglichkeit Funktionen zu :schreiben. Das ist zwar viel langlamer, aber machmal nicht zu ändern.

Wenn man das was wofür outer joins da sind mit Funktionen versucht, wird es aber sehr schnell absolut katastrophal langsam …

Hy!
Danke für eure Hilfe, es hat alles geklappt!