Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

TabellenwertFunktion Performance im View

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Metak, 15 Dezember 2020.

  1. Metak

    Metak Neuer Benutzer

    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 :)
     
  2. dabadepdu

    dabadepdu Datenbank-Guru

    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.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  4. Metak

    Metak Neuer Benutzer

    Was ist CTE? Bin neu im Business :p
     
  5. Walter

    Walter Administrator Mitarbeiter

    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.
     
  6. Metak

    Metak Neuer Benutzer

    Danke übrigens, habe einfach die Funktion per Crossapply gejoint. Wusste nicht, dass das geht. Danke für die Hilfe :)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden