DB2 Frage zur Änderung eines LEFT JOIN

Kalito

Erfahrenes Mitglied
Hallo,

ich soll eine SQL überarbeiten und bin dabei über folgende Passage gestolpert:

SQL:
SELECT
            -- Weitere Felder
            
            CASE
                WHEN KHMA.LMKGZG_LMKG_ID IS NULL
                THEN 'N'
                ELSE 'J'
            END AS KH_BEHANDLUNG,
            CASE
                WHEN REHA.LMKGZG_LMKG_ID IS NULL
                THEN 'N'
                ELSE 'J'
            END                         AS REHA_BEHANDLUNG,
            
            -- Weitere Felder
        FROM
            LE_AUDATEN AUD
        LEFT JOIN
            (
                SELECT DISTINCT
                    LMKGZG_LMKG_ID
                FROM
                    LE_LMKG_ZUGEOMASSN_LMKVSTELLV,
                    LE_LMKVSTELLV
                WHERE
                    ZUGEOMASSN_LMKVSTELLV_ID = OID
                AND LEISTUNGMASSNAHMEART = 18 ) KHMA
        ON
            (
                LMK.OID = KHMA.LMKGZG_LMKG_ID)
        LEFT JOIN
            (
                SELECT DISTINCT
                    LMKGZG_LMKG_ID
                FROM
                    LE_LMKG_ZUGEOMASSN_LMKVSTELLV,
                    LE_LMKVSTELLV
                WHERE
                    ZUGEOMASSN_LMKVSTELLV_ID = OID
                AND LEISTUNGMASSNAHMEART = 32 ) REHA
        ON
            (
                LMK.OID = REHA.LMKGZG_LMKG_ID)
                
        -- Weitere JOINS

Nun wollte ich es in folgende Form umbauen:

SQL:
SELECT
            -- Weitere Felder
            
            CASE
                WHEN KR.LEISTUNGMASSNAHMEART = 18
                THEN 'J'
                ELSE 'N'
            END AS KH_BEHANDLUNG,
            CASE
                WHEN KR.LEISTUNGMASSNAHMEART = 32
                THEN 'J'
                ELSE 'N'
            END                         AS REHA_BEHANDLUNG,
            
            -- Weitere Felder
        FROM
            LE_AUDATEN AUD
        LEFT JOIN
            (
                SELECT DISTINCT
                    LMKGZG_LMKG_ID,
                    LEISTUNGMASSNAHMEART
                FROM
                    LE_LMKG_ZUGEOMASSN_LMKVSTELLV,
                    LE_LMKVSTELLV
                WHERE
                    ZUGEOMASSN_LMKVSTELLV_ID = OID
                AND LEISTUNGMASSNAHMEART IN (18,32) ) KR
        ON
            (
                LMK.OID = KR.LMKGZG_LMKG_ID)
                
        -- Weitere JOINS

Das neue SQL führt dazu, dass ich beim Ergebnis 3000 Zeilen mehr bekomme. Habt ihr eine Idee, wie das sein kann?

Danke und Gruß Patrick
 

Zvoni

Erfahrenes Mitglied
Wenn ich es richtig lese müsste es in deinem neuen Versuch eher in der Art
CASE bnlablab<>18 (bzw. CASE blablaba<>32) heissen.
Im originalen SQL prüfst du im CASE auf IS NULL für die Resultate aus den LEFT JOINS, welche du aber mit =18 (=32) filterst.
Wobei ich mir nicht sicher bin, ob du dann das gewünschte Resultat bekommst. Ist mir jetzt nur so auf den ersten Blick aufgefallen. Bin mir nichts sicher ob du aus den zwei LEFT JOINS einen machen kannst, da "=18" eben "<>32" ist (und umgekehrt)

EDIT: Uh? Ich sehe gerade nirgends dass du im ON der JOINS das Alias AUD verwendest. Habe ich nen Denkfehler? Und wo kommt das Alias LMK her?
 
Zuletzt bearbeitet: