SQL Abfrage verstehen

IchHH

Datenbank-Guru
Beiträge
282
Hallo,
ich hoffe ihr könnt mir helfen.

Wenn ich eine Tabelle die keine fortlaufende Datumsspalte besitzt um eine "anreichere" mittels Right Outer Join, dann sollten doch alle Datumsfelder meiner Datumstabelle erscheinen. Aus irgendeinen Grund funktioniert das nicht und ich sehe nicht an welcher Stelle ich das unterbunden habe.

Hier mein Code.
Code:
SELECT
 dbo.v_ACDOCA.Kontonummer
,dbo.v_ACDOCA.[Wert in Hauswährung]
,dbo.v_ACDOCA.Materialnummer
,dbo.v_ACDOCA.Geschäftsjahr
,CASE WHEN Buchungsdatum = '20560131' THEN CONCAT(Year(GetDate())-2,'0101') ELSE Buchungsdatum END AS Buchungsdatum
,CASE WHEN dbo.v_ACDOCA.Werk = '' THEN '1010' ELSE Werk END AS Werk
,dbo.v_SQL_Datum.Style112

FROM   dbo.v_ACDOCA

RIGHT OUTER JOIN
      dbo.v_SQL_Datum
      ON dbo.v_ACDOCA.BUDAT = dbo.v_SQL_Datum.Style112

        WHERE Kontonummer like '%13600000'
            AND    (Belegart <> ''    OR (Buchungsdatum = '20560131' AND Geschäftsjahr=Year(GetDate())-2))
            AND Materialnummer like '%5408'
            AND (Style112 >= '20210101' AND Style112 <= GetDate())

Soweit ich es richtig in Erinnerung habe, filtert SQL erst die Daten nach den Where Bedingungen ehe die Right Outer Join Verbindung greift. Da ich ihm zudem sage das dass Datum nur bis zum heutigen Tag gehen soll. Hätte ich nun 856 Zeilen erwartet. Es kommt aber nur die 353 aus der ACDOCA. Warum?
 
Werbung:
Das mit dem Right Outer Join habe ich demnach richtig gemacht. Was mir aber nun klar wurde ist, dass ich keine weiteren Datumsfelder angezeigt bekomme kann, da ich durch die Nullwerte in Material und der unten erfolgten Einfilterung auf Material like '%5408' garnicht anzeigt bekommen kann. Die Frage ist wie heile ich das?
 
Nun weiß ich meine Frage zu Formulieren. Wie binde ich eine Datumstabelle an die mir pro Material und Werk immer alle Datumsfelder aus der v_SQL_Datum.Style112 liefert?
 
Werbung:
Wenn Du outer Joins machst, darfst Du sie nicht mit dem Where Kriterium "verletzen".
Da Dein SQL leider keine Alias nutzt(!) und die Struktur Deiner Tabellen ebenfalls unklar ist, kann ich es nicht konkret(er) schreiben.

Was Du mit einem Outer Join an Daten hinzubekommst, kannst Du durch gegenläufige Where Kriterien spielend wieder verlieren.
Die Lösung des Problems liegt meist darin, die Where Kriterien, die den Outer Join platzen lassen, in das Join Kriterium zu verschieben.

Die Venn Diagramme gibt es übrigens dutzendfach im Netz ohne Registrierung und ich finde sie für Anfänger gar nicht unproblematisch. Dazu gibt es auch lustige Diskussionen im Netz.
 
Zurück
Oben