MainframeSupports
tip uge 9/1999:

Data inkonsistens er desværre et udbredt problem, som mange installationer kæmper med hver dag. Når data er gemt i relationsdatabaser med SQL-interface er det forholdsvis let at finde data inkonsistens. Lad os se på et hyppigt anvendt SQL-kald:
select *
from tabel1 t1
where not exists
( select *
  from tabel2 t2
  where t1.col1 = t2.col1
)
SQL-kaldet finder rækker i tabel1, som ikke har en tilhørende række i tabel2, når vi antager at t1.col1 og t2.col1 danner sammenhængen mellem de to tabeller. Normalt vil col1 være primær nøgle (eller del af den) i den ene tabel og fremmednøgle (eller del af den) i den anden tabel.

Ugens tip går simpelthen ud på at omskrive ovenstående SQL-kald til en såkaldt outer join, som blev tilgængelig i DB2 med version 4.1. Herefter kan man skrive et SQL-kald, der producerer nøjagtig samme resultat på følgende måde:

select t1.*
from tabel1 t1
left outer join tabel2 t2
on t1.col1 = t2.col1
where t2.col1 is null
Om man synes bedst om at skrive sit SQL-kald på den ene eller anden måde er en smagssag, men i de fleste tilfælde vil metoden med outer join køre langt hurtigere. Man kan for i øvrigt stave outer som outter i version 4.1 af DB2. Det må siges at være lidt af en stavebøf. Du kan læse mere om brugen af outer join (og inner join) i SQL reference for DB2 version 4.1 og 5.1.
Sidste uges tip        Tip oversigten