hawkmaster1: IF / Case unterschiedliche Spalten (Tabellen)

Hallo zusammen,

Kann man in einer Case oder IF Anweisung auch unterschiedliche Tabellen ansprechen?
Ich möchte gerne so etwas machen:

CASE
A.TabsJobtkID
WHEN 15
THEN J.ControlDef, J.GroupDef
ELSE I.ControlDef, I.GroupDef
END

---------------------------------------
SELECT
A.SystemID, A.ElementID, A.DisplayState,
B.ElementValue, B.DefaultValue,
C.English AS ElementValueDisplay,
D.TabDef,
E.English AS TabNameLanguage,
G.English AS ElementDisplay,
I.ControlDef, I.GroupDef
FROM
elementgroup A

Mein SQL Befehl mit mehreren JOINs liefert in den Zeilen wo die A.TabsJobtkID = 15 ist, in den Spalten ElementDisplay, ControlDef und GroupDef NULL Werte weil man hier mit einer anderen Tabelle joinen müsste.

vielen Dank
Gruss
hawk

  1. Mahlzeit hawkmaster1,

    vielen Dank, dass Du das von Dir verwendete DBMS angegeben hast ...

    Dann rate ich mal:

    Kann man in einer Case oder IF Anweisung auch unterschiedliche Tabellen ansprechen?

    Ja.

    Allerdings liefert ein CASE-Statement immer *genau einen* Wert zurück. Du könntest also z.B. folgendes probieren:

    SELECT [...]  
    ,      CASE A.TabsJobtkID WHEN 15 THEN J.ControlDef ELSE I.ControlDef END AS ControlDef  
    ,      CASE A.TabsJobtkID WHEN 15 THEN J.GroupDef ELSE I.GroupDef END AS GroupDef  
      FROM elementgroup A  
    [...]
    

    Unterschiedliche DBMS bieten dafür auch "Kurzschreibweisen" (bzw. Funktionen) an, Oracle z.B.:

    SELECT [...]  
    ,      DECODE(A.TabsJobtkID, 15, J.ControlDef, I.ControlDef) AS ControlDef  
    ,      DECODE(A.TabsJobtkID, 15, J.GroupDef, I.GroupDef) AS GroupDef  
      FROM elementgroup A  
    [...]
    

    Mein SQL Befehl mit mehreren JOINs liefert in den Zeilen wo die A.TabsJobtkID = 15 ist, in den Spalten ElementDisplay, ControlDef und GroupDef NULL Werte weil man hier mit einer anderen Tabelle joinen müsste.

    Wenn Du Probleme mit NULL-Werten hast, könntest Du Dir auch mal die Funktion NVL() anschauen ...

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. vielen Dank, dass Du das von Dir verwendete DBMS angegeben hast ...

      Wenn Du Probleme mit NULL-Werten hast, könntest Du Dir auch mal die Funktion NVL() anschauen ...

      In MySQL auch mit COALESCE() oder IFNULL().

    2. Hallo EKKI,

      vielen Dank, dass Du das von Dir verwendete DBMS angegeben hast ...

      sorry, du hast natürlich recht. Die Glaskugel ist beschlagen.
      Ich verwende MySQL.

      Wenn Du Probleme mit NULL-Werten hast, könntest Du Dir auch mal die Funktion NVL() anschauen ...

      ich habe kein Problem mit den NULL Werten.Ich weiss nur nicht wie ich die andere, zusätzliche Tabelle JOINEN kann, ohne zusätzliche Spaltenangaben, bzw.
      das die Spalten ElementDisplay, ControlDef und GroupDef auch Werte enthalten.

      Gruss
      hawk

    3. Hallo nochmals,

      Allerdings liefert ein CASE-Statement immer *genau einen* Wert zurück. Du könntest also z.B. folgendes probieren:

      CASE A.TabsJobtkID WHEN 15 THEN J.ControlDef ELSE I.ControlDef END AS ControlDef,
      CASE A.TabsJobtkID WHEN 15 THEN J.GroupDef ELSE I.GroupDef END AS GroupDef
      FROM elementgroup A

      eben getestet. Funktioniert wunderbar.
      Würde das eigentlich auch mit MS SQL oder PostGre gehen?

      gruss
      hawk

      1. Mahlzeit hawkmaster1,

        Würde das eigentlich auch mit MS SQL oder PostGre gehen?

        Ich habe weder das eine noch das andere hier - probier's doch einfach aus (oder schau alternativ in deren Doku nach, ob sie CASE [...] verstehen).

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|