Hier nochmal runtergebrochen aufs wesentliche wie es bei mir aussieht.
Hab auch schon statt iif mit einer Function probiert aber auch so viele Ergebnisse.
Mit Plan auch schon hin und her probiert aber find da auch keine Lösung.
** Hintergrund warum ich das mache.
Durch die Eigenschaft "Global" in der Tabelle1 sollen die Werte aus Tabelle3 immer aus dem Main aus Tabelle2 (Es kann immer nur ein Main in Tabelle2 geben) geladen werden.
Ansonsten wenn nicht "Global" lies wie gehabt.
Dieses Statement habe ich in eine View gepackt um den Zugriff auf Tabelle3 im Programm zu manipulieren. (Wollte mir ersparen in Delphi alles anpassen zu müssen)
Das funktioniert auch wie gewünscht, jedoch bisschen langsam durch die mehrfachen reads die meiner Meinung nach unnötig gemacht werden.
Code:
select T1.ID as T1_ID,
T2.ID as T2_ID,
T3.WERT
from TABELLE1 T1
cross join TABELLE2 T2
inner join TABELLE3 T3 on T3.T1_ID = T1.ID
-- 604 reads
( ( T1."GLOBAL" and
( T3.T2_ID = ( select T2_TEMP.ID
from TABELLE2 T2_TEMP
where T2_TEMP.MAIN))) or
( not T1."GLOBAL" and
( T3.T2_ID = T2.ID)))
-- 314 reads
( T3.T2_ID = ( select T2_TEMP.ID
from TABELLE2 T2_TEMP
where T2_TEMP.MAIN))
-- 290 reads
( T3.T2_ID = T2.ID)
-- iif() 5264 reads
T3.T2_ID = iif( T1."GLOBAL", ( select T2_TEMP.ID
from TABELLE2 T2_TEMP
where T2_TEMP.MAIN), T2.ID)
where T1.ID = 111 and
T2.ID = 20