Wenn Schlüssel in anderer Tabelle vorhanden: ja

Hallo Leute,
jetzt dachte ich, dass hier gelernte funktioniert ohne Probleme und dann erblicke ich beim Überprüfen eines Einzelfalles einen Fehler:
Das Zählen der Klausel funktioniert irgendwie nicht so wie gewünscht.

Dieses Query liefert ein "nein" zurück, obwohl es, wenn ich händisch die Klauseltabelle durchwühle ein "ja" sein müsste, da es eine Klausel gibt.
Code:
SELECT 
'000000010000' || TRIM(ez.VERTRAG_NUMMER) || '0000000000' || TRIM(ez.VERTRAG_NUMMER) || '0' || TRIM(ez.EZ_NUMMER) || TRIM(ri.RISIKO) B,
CASE WHEN count(kl.ENTITAET_SCHLUESSEL) > 0 THEN 'ja' ELSE 'nein' END Klausel
FROM VECA_POLICE po
LEFT JOIN VECS_EINZELZERTIFIKAT ez ON ez.POLICE_NUMMER = po.POLICE_NUMMER 
LEFT JOIN VEGC_RISIKEN ri ON ri.EZ_NUMMER = ez.EZ_NUMMER AND ri.GUELTIG_BIS_DATUM IS NULL
LEFT JOIN VECL_KLAUSELN kl ON kl.ENTITAET_SCHLUESSEL = '000000010000' || TRIM(ez.VERTRAG_NUMMER) || '0000000000' || TRIM(ez.VERTRAG_NUMMER) || '0' || TRIM(ez.EZ_NUMMER) || TRIM(ri.RISIKO)
    AND kl.ENTITAET_NAME = 'GARANTIA' 
    AND ((kl.FEC_BAJA_CLAUSULA BETWEEN 20200101 AND 20220131) OR kl.FEC_BAJA_CLAUSULA IS NULL)
WHERE po.BEGINN_DATUM BETWEEN 20200101 AND 20220131            -- 1. Neue EZ
AND ez.EZ_NUMMER = '81558375001'
AND ri.RISIKO ='UKHPN   '
GROUP BY '000000010000' || TRIM(ez.VERTRAG_NUMMER) || '0000000000' || TRIM(ez.VERTRAG_NUMMER) || '0' || TRIM(ez.EZ_NUMMER) || TRIM(ri.RISIKO)

Da ich vermutete, dass es mit dem hässlich zusammengesetzten Schlüssel zusammenhängt, habe ich den in dieser Variante manuell zusammengesetzt. Und sie da: Es wird aus dem "nein" ein "ja". Der Schlüssel, den ich als A, bzw. B zu Testzwecken ausgebe, ist aber 1:1 identisch. Hat jemand einen Vorschlag?

Code:
SELECT 
'000000010000' || '815583750' || '0000000000' || '815583750' || '0' || '81558375001' || 'UKHPN' A,
CASE WHEN count(kl.ENTITAET_SCHLUESSEL) > 0 THEN 'ja' ELSE 'nein' END Klausel
FROM VECA_POLICE po
LEFT JOIN VECS_EINZELZERTIFIKAT ez ON ez.POLICE_NUMMER = po.POLICE_NUMMER 
LEFT JOIN VEGC_RISIKEN ri ON ri.EZ_NUMMER = ez.EZ_NUMMER AND ri.GUELTIG_BIS_DATUM IS NULL
LEFT JOIN VECL_KLAUSELN kl ON kl.ENTITAET_SCHLUESSEL = '000000010000' || '815583750' || '0000000000' || '815583750' || '0' || '81558375001' || 'UKHPN'
    AND kl.ENTITAET_NAME = 'GARANTIA' 
    AND ((kl.FEC_BAJA_CLAUSULA BETWEEN 20200101 AND 20220131) OR kl.FEC_BAJA_CLAUSULA IS NULL)
WHERE po.BEGINN_DATUM BETWEEN 20200101 AND 20220131            -- 1. Neue EZ
AND ez.EZ_NUMMER = '81558375001'
AND ri.RISIKO ='UKHPN   '
GROUP BY '000000010000' || '815583750' || '0000000000' || '815583750' || '0' || '81558375001' || 'UKHPN'
TRIM(ri.RISIKO)
 
Werbung:
Warum nur mit LIKE? Nicht sehr elegant und unter Umständen problematisch.
Und der Schlüssel sieht bspw. so aus: 0000000100008155671600000000000815567160081556716003UKHPN0081556716003
mit
LIKE ('%' || TRIM(ez.EZ_NUMMER)
Das ist nicht nur u.U. problematisch. Das vorangestellte Wildcardzeichen sorgt dafür, dass ein Index nicht nutzbar ist.
Hier lohnt sich vielleicht etwas ("Programmier")Aufwand, um das vorangestellte % zu vermeiden.
Bei ein paar Tausend DS tut es sicher nicht weh, jedes Mal ein Fullscan zu haben, aber je mehr, desto Aua.
 
Werbung:
Zurück
Oben