Hallo!
Ich scheitere gerade an einem Basic und benötige etwas Hilfe.
Wunsch:
select something from x where a='abc' and b='xyz'
Wenn die obere Abfrage keinen Treffer bringt, dann:
select something from x where a='abc'
(Die allgemeiner gefasste Abfrage darf nicht ausgeführt werden, wenn die andere bereits einen Wert geliefert hat)
################################################################################
Mein Ansatz ist sehr zeitintensiv, da es sich um eine ODBC-Abfrage handelt.
Ebenfalls muss zu jedes „something“ mit einem „Group by“ versehen werden, da mehrere Rows zurückkommen können. Ich habe zur Zeit etwa 4-5 Sekunden pro Abfrage, was definitiv zu viel ist...
select something from x where a='abc' and b='xyz'
union select something from x where
not exists (select something from x where a='abc' and b='xyz') and a='abc'
Meine Realität:
select a.patidnb PATID, a.titel TITEL, a.name_prf Namenszusatz, a.name FAMILIENNAME, a.birthdt GEBURTSDATUM, a.sx Geschlecht, a.ADR Strasse, a.ZIP PLZ, a.CITY Wohnort, (case when a.EGKNB is not null then a.EGKNB else b.mitgliednr end) as Versichertennummer , a.ARCH_FL, b.inst_kennung Kassennummer from PATD a, PATDSUP b where a.patidnb=b.patorordnb and a.name like':3101%' and a.birthdt=':3103' and ((b.mitgliednr=':3105') or (a.egknb=':3105')) and a.arch_fl<>'D' group by a.patidnb, a.titel, a.name_prf, a.name, a.birthdt, a.sx, a.ADR, a.ZIP, a.CITY, a.ARCH_FL, b.inst_kennung, a.EGKNB, b.mitgliednr order by a.name
union select a.patidnb PATID, a.titel TITEL, a.name_prf Namenszusatz, a.name FAMILIENNAME, a.birthdt GEBURTSDATUM, a.sx Geschlecht, a.ADR Strasse, a.ZIP PLZ, a.CITY Wohnort, (case when a.EGKNB is not null then a.EGKNB else b.mitgliednr end) as Versichertennummer , a.ARCH_FL, b.inst_kennung Kassennummer from PATD a, PATDSUP b
where not exist
(select a.patidnb PATID, a.titel TITEL, a.name_prf Namenszusatz, a.name FAMILIENNAME, a.birthdt GEBURTSDATUM, a.sx Geschlecht, a.ADR Strasse, a.ZIP PLZ, a.CITY Wohnort, (case when a.EGKNB is not null then a.EGKNB else b.mitgliednr end) as Versichertennummer , a.ARCH_FL, b.inst_kennung Kassennummer from PATD a, PATDSUP b where a.patidnb=b.patorordnb and a.name like':3101%' and a.birthdt=':3103' and ((b.mitgliednr=':3105') or (a.egknb=':3105')) and a.arch_fl<>'D' group by a.patidnb, a.titel, a.name_prf, a.name, a.birthdt, a.sx, a.ADR, a.ZIP, a.CITY, a.ARCH_FL, b.inst_kennung, a.EGKNB, b.mitgliednr order by a.name)
and a.patidnb=b.patorordnb and a.name like':3101%' and a.birthdt=':3103' and a.arch_fl<>'D' group by a.patidnb, a.titel, a.name_prf, a.name, a.birthdt, a.sx, a.ADR, a.ZIP, a.CITY, a.ARCH_FL, b.inst_kennung, a.EGKNB, b.mitgliednr order by a.name
Ich scheitere gerade an einem Basic und benötige etwas Hilfe.
Wunsch:
select something from x where a='abc' and b='xyz'
Wenn die obere Abfrage keinen Treffer bringt, dann:
select something from x where a='abc'
(Die allgemeiner gefasste Abfrage darf nicht ausgeführt werden, wenn die andere bereits einen Wert geliefert hat)
################################################################################
Mein Ansatz ist sehr zeitintensiv, da es sich um eine ODBC-Abfrage handelt.
Ebenfalls muss zu jedes „something“ mit einem „Group by“ versehen werden, da mehrere Rows zurückkommen können. Ich habe zur Zeit etwa 4-5 Sekunden pro Abfrage, was definitiv zu viel ist...
select something from x where a='abc' and b='xyz'
union select something from x where
not exists (select something from x where a='abc' and b='xyz') and a='abc'
Meine Realität:
select a.patidnb PATID, a.titel TITEL, a.name_prf Namenszusatz, a.name FAMILIENNAME, a.birthdt GEBURTSDATUM, a.sx Geschlecht, a.ADR Strasse, a.ZIP PLZ, a.CITY Wohnort, (case when a.EGKNB is not null then a.EGKNB else b.mitgliednr end) as Versichertennummer , a.ARCH_FL, b.inst_kennung Kassennummer from PATD a, PATDSUP b where a.patidnb=b.patorordnb and a.name like':3101%' and a.birthdt=':3103' and ((b.mitgliednr=':3105') or (a.egknb=':3105')) and a.arch_fl<>'D' group by a.patidnb, a.titel, a.name_prf, a.name, a.birthdt, a.sx, a.ADR, a.ZIP, a.CITY, a.ARCH_FL, b.inst_kennung, a.EGKNB, b.mitgliednr order by a.name
union select a.patidnb PATID, a.titel TITEL, a.name_prf Namenszusatz, a.name FAMILIENNAME, a.birthdt GEBURTSDATUM, a.sx Geschlecht, a.ADR Strasse, a.ZIP PLZ, a.CITY Wohnort, (case when a.EGKNB is not null then a.EGKNB else b.mitgliednr end) as Versichertennummer , a.ARCH_FL, b.inst_kennung Kassennummer from PATD a, PATDSUP b
where not exist
(select a.patidnb PATID, a.titel TITEL, a.name_prf Namenszusatz, a.name FAMILIENNAME, a.birthdt GEBURTSDATUM, a.sx Geschlecht, a.ADR Strasse, a.ZIP PLZ, a.CITY Wohnort, (case when a.EGKNB is not null then a.EGKNB else b.mitgliednr end) as Versichertennummer , a.ARCH_FL, b.inst_kennung Kassennummer from PATD a, PATDSUP b where a.patidnb=b.patorordnb and a.name like':3101%' and a.birthdt=':3103' and ((b.mitgliednr=':3105') or (a.egknb=':3105')) and a.arch_fl<>'D' group by a.patidnb, a.titel, a.name_prf, a.name, a.birthdt, a.sx, a.ADR, a.ZIP, a.CITY, a.ARCH_FL, b.inst_kennung, a.EGKNB, b.mitgliednr order by a.name)
and a.patidnb=b.patorordnb and a.name like':3101%' and a.birthdt=':3103' and a.arch_fl<>'D' group by a.patidnb, a.titel, a.name_prf, a.name, a.birthdt, a.sx, a.ADR, a.ZIP, a.CITY, a.ARCH_FL, b.inst_kennung, a.EGKNB, b.mitgliednr order by a.name