Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Schema aus CASE-Anweisung?

  1. #1
    derLars ist offline Neuer Benutzer
    Registriert seit
    23.11.2009
    Beiträge
    11

    Standard Schema aus CASE-Anweisung?

    Hallo allesamt,

    ich habe zwei Schemata Semester und Trimester, die über einen search_path verbunden sind. Über einen flag in einer Tabelle möchte ich jetzt in einer SQL-Abfrage entscheiden, welches Schema genommen wird - ohne das ich den search_path neu setzen muss.

    Leider scheine ich keine CASE-Anweisung im FROM-Teil eingeben zu können (einfaches Beispiel):
    Code:
    SELECT
        *
    FROM
        (CASE WHEN 1=1 THEN semester.tabelle ELSE trimester.tabelle END);
    Gibt es eine Möglichkeit, das per CASE zu regeln? Falls nein, gibts da eine andere Möglichkeit (über den search_path kann ich leider nicht gehen)?

    Viele Grüße,
    Lars

  2. #2
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    du musst das von der anderen seite aufrollen

    SELECT * FROM trimester.tabelle WHERE waswillich = 'trimester'
    UNION
    SELECT * FROM semester.tabelle WHERE waswillich = 'semester'

    dafuer lohnt es sich in deinen tabellen so einen constraint key einzubauen auf waswillich . . der koennte wasbinich heissen

  3. #3
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von derLars Beitrag anzeigen
    Hallo allesamt,

    ich habe zwei Schemata Semester und Trimester, die über einen search_path verbunden sind. Über einen flag in einer Tabelle möchte ich jetzt in einer SQL-Abfrage entscheiden, welches Schema genommen wird - ohne das ich den search_path neu setzen muss.

    Leider scheine ich keine CASE-Anweisung im FROM-Teil eingeben zu können (einfaches Beispiel):
    Code:
    SELECT
        *
    FROM
        (CASE WHEN 1=1 THEN semester.tabelle ELSE trimester.tabelle END);
    Gibt es eine Möglichkeit, das per CASE zu regeln? Falls nein, gibts da eine andere Möglichkeit (über den search_path kann ich leider nicht gehen)?

    Viele Grüße,
    Lars
    Nein, das geht so nicht. Du könntest Dir eine Funktion schreiben (plpgsql) und innerhalb dieser dynamsich das korrekte SQL erzeugen (als String) und diesen via EXECUTE ausführen.

    CASE geht so nicht anzuwenden.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von symbiont Beitrag anzeigen
    du musst das von der anderen seite aufrollen

    SELECT * FROM trimester.tabelle WHERE waswillich = 'trimester'
    UNION
    SELECT * FROM semester.tabelle WHERE waswillich = 'semester'
    Symbiont: nein.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    Andres: Doch

    denk an table-partitioning .. aber selbst ohne - mit geeigneten constraints usw sollte der optimizer die nicht-interessanten SELECTs garnicht ausfuehren ...

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von symbiont Beitrag anzeigen
    Andres: Doch
    Nein. Ich erklär es Dir langsamm. Er will mal diese oder mal die andere Tabelle abfragen. Er will nicht das UNION dieser beiden Tabellen.

    Nun verstanden?


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    ja .. und das diese oder jene tabelle koennte man den optimizer via "constraint exclusion" entscheiden lassen

  8. #8
    derLars ist offline Neuer Benutzer
    Registriert seit
    23.11.2009
    Beiträge
    11

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Nein, das geht so nicht. Du könntest Dir eine Funktion schreiben (plpgsql) und innerhalb dieser dynamsich das korrekte SQL erzeugen (als String) und diesen via EXECUTE ausführen.

    CASE geht so nicht anzuwenden.
    hm, und dann innerhalb der Funktion mit if arbeiten... okay. Hatte gehofft das umgehen zu können.

    Vielen Dank und eine schöne Woche,
    Lars

  9. #9
    derLars ist offline Neuer Benutzer
    Registriert seit
    23.11.2009
    Beiträge
    11

    Standard

    Zitat Zitat von symbiont Beitrag anzeigen
    ja .. und das diese oder jene tabelle koennte man den optimizer via "constraint exclusion" entscheiden lassen
    Hättest Du ein Beispiel? Würde mir gerne das Schreiben einer funktion dafür ersparen.

  10. #10
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    Eigentlich ist es ein Thema der Tabellenpartitionierung .. ich denke aber dass du die mechanismen hier "missbrauchen" kannst .. also dass die tabellen auf verschiedenen tablespaces liegen koennten ist fuer dich erstmal unerheblich

    Vorraussetzung ist, dass trimester und semester von einer gemeinsamen tabelle erben - eben die gleiche signatur haben .. da koenntest du den typ-key festlegen ..

    PostgreSQL: Documentation: Manuals: PostgreSQL 8.4: Partitioning
    Geändert von symbiont (23.11.2009 um 13:56 Uhr)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Problem bei Restore: ungültige Anweisung \N
    Von Hannes23 im Forum Allgemeines
    Antworten: 0
    Letzter Beitrag: 29.02.2012, 10:16
  2. Rollback mit Extra Anweisung
    Von CvonS im Forum Andere Datenbanken
    Antworten: 1
    Letzter Beitrag: 01.07.2009, 15:00
  3. Problem Frage zu einer geschachtelten SQL-Anweisung
    Von wh_20 im Forum SQL
    Antworten: 2
    Letzter Beitrag: 26.05.2009, 07:03
  4. Anweisung über Parameter ausführen
    Von kbsolutions im Forum Trigger und Funktionen
    Antworten: 4
    Letzter Beitrag: 24.08.2007, 09:33
  5. Antworten: 2
    Letzter Beitrag: 02.05.2007, 12:39

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum