Informationsverlust beim Verknüpfen
PeterDoering
Gesendet: 13.11.12 13:48
Betreff: RE: Informationsverlust beim Verknüpfen



Extreme Veteran

Beiträge: 451
1001001001002525
Hallo,

bkleine - 13.11.12 11:32
ich habe vier Tabellen Ziel, Status, in Arbeit, verschoben mit gleiche Feldern: Country, Object, Anzahl. Objecte gehen von A-E

Ich finde in deinem Statement kein E. Ich gehe mal davon aus, dass du [in Arbeit] und A meinst.

Diese verknüpfe ich mit folgender Abfrage:
SELECT
Z.Country,
Z.[object] as Grundobject,
S.[object],
A.[object],
V.[object],
Z.[Anzahl] AS [Target],
S.[Anzahl] AS [Zielvorgabe],
A.[Anzahl] AS [bearbeitet],
V.[Anzahl] AS [wurde verschoben]
FROM (([Ziel] as Z LEFT JOIN [Status] as S ON Z.Country = S.Country)
LEFT JOIN [in Arbeit] as A ON Z.Country = A.Country)
LEFT JOIN [verschoben] as V ON Z.Country = V.Country
WHERE (((S.[object])=[Grundobject]) AND ((A.[object])=[Grundobject]) AND ((V.[object])=[Grundobject]));

LEFT JOIN soll bewirken, dass in deinem Fall alle Eintraege von [Ziel] angezeigt werden, desweiteren alle passenden Eintraege der Tabellen [Status], [in Arbeit] und [verschoben]. Da du innerhalb WHERE aber Bedingungen auf alle verlinkten Tabellen abfragst, hat das dieselbe Auswirkung als wuerdest du INNER JOINs verwenden.

Leider verschwindet die ganze Zeile für z.B. "E" im Ergebnis, wenn ein Object Wert "E" in [in Arbeit] gar nicht auftaucht.

Genau, das ist die Konsequenz.

Frage: Wie muss ich meine Abfrage gestalten, damit auch fehlende Werte als leere Ergebnisse berücksichtigt werden? Hinweis oder Link würden mir schon ausreichen.

Du musst zusaetzlich auf Null abfragen:

WHERE (S.[object]=[Grundobject] OR S.[object] Is Null) AND (A.[object]=[Grundobject] OR A.[object] Is Null) AND (V.[object]=[Grundobject] OR V.[object] Is Null);

-----
Gruss - Peter
Top of the page Bottom of the page