TabellenwertFunktion Performance im View

Metak

Neuer Benutzer
Beiträge
3
Hallo Leute,

habe mich gerade registriert, weil ich leider nicht weiter weiß. Vielleicht kann mir ja einer von euch helfen.

Folgendes Problem:

Ich habe einen sehr komplexen View mit einigen Union's. In einem der Union's muss ich eine Tabellenwertfunktion aufrufen.
aus der tsf bekomme ich 4 Werte, die ich prüfen muss, und dann ausgeben. Für einen Select muss (bzw. ich weiß es nicht anders) die Funktion 3 mal aufrufen. Gibt es eine Möglichkeit das zu umgehen? Ich befinde mich in einem View, also keine Variablen.
select
CASE WHEN (select Artikelwechsel FROM [dbo].[tsf_Get_RuestZeiten_Table] (pa.S_ID,a.s_ID) ) > 0 and (select Formatwechsel FROM [dbo].[tsf_Get_RuestZeiten_Table] (pa.S_ID,a.s_ID)) <= 0
THEN Artikelwechsel

WHEN (select Artikelwechsel FROM [dbo].[tsf_Get_RuestZeiten_Table] (pa.S_ID,a.s_ID)) <= 0 and (select Formatwechsel FROM [dbo].[tsf_Get_RuestZeiten_Table] (pa.S_ID,a.s_ID)) > 0
THEN (select Formatwechsel FROM [dbo].[tsf_Get_RuestZeiten_Table] (pa.S_ID,a.s_ID))
else 0
usw.

Bin gerade einfach zu dumm eine Lösung zu finden. So geht das Performancetechnisch auf keinen Fall. Wäre nett, wenn jemand Zeit und eine Idee hätte.

Danke schonmal :)
 
Werbung:
Wenn die Funktion genau einen Record liefert, nimm sie einfach in die From Clause rein, gib ihr einen Alias und mach Dein Case direkt mit den Feldern ohne Select.
 
du könntest CTE verwenden, also in etwa so:

Code:
test=*# with x as ( select 1 as x) select case when x.x = 1 then 'eins' else 'nö' end from x;
 case
------
 eins
(1 row)

test=*#

Nach dem WITH berechnest halt Deine Sachen, und kannst dann auf diese virtuellen Tabellen zugreifen.
 
CTE sind common table expressions, verfügbar ist das ab Mysql 8. Damit kannst Du komplexe Abfragen in überschaubarere Teile zerlegen und dann ähnlich wie Views mit ihrem Namen verwenden.
 
Werbung:
Zurück
Oben