Mysql-Befehl optimieren



  • Hallo,
    habe ein kleines Problem:
    Und zwar gibt es eine Tabelle 'a' in welcher ein Flag gesetzt ist. Ist es 0 soll aus der Tabelle 'b', ist es 1 aus der Tabelle 'c' und ist es 2 aus der Tabelle 'd' gelesen werden. Das ganze muss in einer Anweisung erfolgen. Habe auch eine Anweisung erstellt, die funktioniert:

    select b.BestellNbr, b.KundenNbr, 
    CASE b.ClientArt ";
    WHEN 0 THEN (select Firma from kunde k  where k.KundenNbr=b.KundenNbr)
    WHEN 1 THEN (select Firma from auftrag_geber a where a.AuftragGeberNbr=b.KundenNbr)
    WHEN 2 THEN  (select Firma from lieferant l where l.LieferantNbr=b.KundenNbr)
    END AS Firma, 
    CASE b.ClientArt ";
    WHEN 0 THEN (select Vorname from kunde k  where k.KundenNbr=b.KundenNbr)
    WHEN 1 THEN (select Vorname from auftrag_geber a where a.AuftragGeberNbr=b.KundenNbr)
    WHEN 2 THEN  (select Vorname from lieferant l where l.LieferantNbr=b.KundenNbr)
    END AS Vorname ";
    from bestellung b order by Vorname";
    

    Da es aber deutlich mehr Felder sind, welche ich benötige, also nicht nur Firma und Vorname, denke ich, dass diese Lösung mit Sicherheit nicht wirklich gut ist.
    Kann ich das irgendwie anders lösen?

    Gruß Paul



  • Du könntest ein UNION verwenden, wenn Deine mysql-Version das unterstützt. Also ein JOIN Flagtabelle mit Tabelle B wo Flagtabelle.Flag = 0
    UNION ALL
    JOIN Flagtabelle mit Tabelle C wo Flagtabelle.Flag = 1
    UNION ...



  • Kann mySQL denn kein "if"?



  • Erstmal danke für die Antwort.

    Trotzdem gelingt mir die Sache nicht...



  • SELECT * FROM(
    select b.BestellNbr, b.KundenNbr,k.Firma,k.Vorname
    FROM bestellung JOIN kunde k ON (k.KundenNbr=b.KundenNbr AND b.ClientArt=0)
    UNION ALL
    select b.BestellNbr, b.KundenNbr,a.Firma,a.Vorname
    FROM bestellung JOIN auftrag_geber a ON (a.AuftragGeberNbr=b.KundenNbr AND b.ClientArt=1)
    UNION ALL
    select b.BestellNbr, b.KundenNbr,l.Firma,l.Vorname
    FROM bestellung JOIN lieferant l ON (l.KundenNbr=b.KundenNbr AND b.ClientArt=2)
    )v ORDER BY vorname
    


  • Jau, ich danke dir! Das hat mich auf den richtigen Weg gebracht!

    Also besten Dank für deine schnelle Hilfe!


Anmelden zum Antworten