Ankündigung

Einklappen
Keine Ankündigung bisher.

select mit inhalten aus mehreren Tabellen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • select mit inhalten aus mehreren Tabellen

    ich habe 3 ( Firmen, Gruppen, Mitarbeiter) tabellen die nach folgendem Muster aufgebaut sind
    ID , Name, Vorname, Strasse, ....

    und eine tabelle aktionen
    AID
    Utyp ENUM('F','G','M') // Angabe welche der obrigen Tabellen zugeordnet ist
    Uid // Id in der obrigen Tabelle


    Nun möchte ich eine Ausgabe

    AID, Utyp, Name, Vorname, Strasse


    Code:
    select 
    AId,
    Utyp,
    if(a.Utyp='M',(select m.name from mitarbeiter m where m.ID=a.Uid),
    if(a.Utyp='F' , (select f.name from firmen f where f.ID=a.Uid),
    if(a.eUtyp='G',(select g.name from gruppen g where g.ID=a.Uid))))
    as name,
    if(a.Utyp='M',(select m.vorname from mitarbeiter m where m.ID=a.Uid),
    if(a.Utyp='F',(select f.vorname from firmen f where f.ID=a.Uid),
    if(a.eUtyp='G',(select g.vorname from gruppen g where g.ID=a.Uid))))
    as vorname
    if(a.Utyp='M',(select m.strasse from mitarbeiter m where m.ID=a.Uid),
    if(a.Utyp='F',(select f.strasse from firmen f where f.ID=a.Uid),
    if(a.eUtyp='G',(select g.strasse from gruppen g where g.ID=a.Uid))))
    as strasse
    from aktionen
    gibt es eine möglichkeit die Abfrage nach name, vorname, strasse
    in einer subquery zusammen zufassen

  • #2
    Ich verstehe weder den Sinn noch den Aufbau, aber wenn alle 3 Tabellen den selben Inhalt haben, wäre es eine Überlegung wert, einfach alle Datensätze auch eben in die selbe Tabelle zu packen und zur Unterscheidung eben ein extra Spalte einzuführen.

    Code:
    id, type (ENUM), name, vorname, strasse

    Kommentar


    • #3
      diese tabellen stimmen nur in einem kleinen teil von der struktur her überein
      und stammen aus verschiedenen Teilprojekten damit es nicht ausufert hab ich mich auf die 4 spalten die in den tabellen abgefragt wedren beschränkt

      mir gehts um die verbesserung der sql abfrage da ich es für nicht sinvoll halte 3 mal die selbe abfrage hintereinander zu tätigen, wenn es auch ein mal geht

      Kommentar


      • #4
        Lass sowas. Wenn sich die Struktur unterscheidet, dann verwende pro Tabelle auch einen eigenen SELECT.

        Kommentar


        • #5
          das kann ja jeder

          es ist nur manchmal einfacher einen Komplexen select zu schreiben als umständlich über umwege dies im Programm zu realisieren

          der obrige select ist eine starke vereinfachung des eigentlichen bei mir verwendeten selects

          Kommentar


          • #6
            Ich versteh immer noch nicht, warum du alles mit einem SELECT handhaben willst.

            Was hast du vor?
            Was spricht gegen 3 SELECTs, wenn die Tabellen nunmal unterschiedlich sind?

            Komplexität ist kein Argument für einen gesammelten SELECT, sondern dagegen.

            Kommentar


            • #7
              Dein vorschlag war diese Daten in eine Tabelle zu bringen

              dieser select kann dies zum beispiel tun und dabei noch filterregeln beachten

              was in der db wesentlich schneller geht als diese relativ umständlich in php zu programmieren


              mir gehts in diesem fall eher darum die 9 subselects auf 3 zu reduzieren

              Kommentar

              Lädt...
              X