Oracle Query umbauen (sind die Querys gleich?)

Maliko

Bekanntes Mitglied
Moin,

ich hab ein Query bekommen, welches aus 4 unions besteht, was ich etwas sehr langsam fand. Daher wollte ich das einfach mal so umbauen, dass die unions wegfallen. Könnte von euch wohl mal jemand drüber schauen ob beide Querys immer noch das selbe machen oder ob ich bei meinem Umbau irgendwas übersehen habe (vier Augen sehen bekanntlich mehr als 2):

Hier das alte Statement:

Code:
select count(*) as anzahl from (
select distinct id from t1 a
where exists (select * from t2 b where a.id = b.id and b.referenz = 'ABC123')
     and a.erledigt = 0
union
select distinct id from t1 a
where exists (select * from t2 b where a.id = b.id and b.sammelreferenz = '123ABC')
     and a.erledigt = '0
union
select distinct id from t1 a
where exists (select * from t2 b where a.id = b.id and contains(b.verwendungszweck, 'ABC123', 1) > 0)
     and a.erledigt = 0
union
select distinct id from t1 a
where exists (select * from t2 b where a.id = b.id and contains(b.verwendungszweck, '123ABC', 1) > 0)
     and a.erledigt = 0
);

Und hier das neue Query

Code:
SELECT COUNT(*) as anzahl FROM(
    SELECT DISTINCT * FROM t1
    INNER JOIN t2
        ON t1.id = t2.id
    WHERE
        (
            t2.referenz = 'ABC123'
            or t2.sammelreferenz = '123ABC'
            or contains(t2.verwendungszweck, 'ABC123') > 0
            or contains(t2.verwendungszweck, '123ABC') > 0
        )
        and t1.erledigt = 0
);

Die müssten ja von der Logik her eigentlich identisch sein, oder hab ich da was übersehen?
 
Ich habe jetzt nicht genau geschaut, aber durch union kann es zu doppelten Einträgen kommen (wenn ein Eintrag bei zwei Queries gefunden wurde). Dein Query liefert jeden Eintrag nur einmal.
 

Zurück
Oben