Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] SQL: Kombi aus JOIN und UNION

Einklappen

Neue Werbung 2019

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

  • [Erledigt] SQL: Kombi aus JOIN und UNION

    Hallo zusammen,

    vorab erstmal zu meinem Vorhaben:
    ich habe in meiner Datenbank mehrere Tabellen die vom Aufbau her identisch sind. Beispielsweise stark vereinfacht:

    VorgaengeA: id, id_un, id_ap, name
    VorgaengeB: id, id_un, id_ap, name
    usw..

    Dazu habe ich je eine Tabelle in der Unternehmen (un) und alle Ansprechpartner (ap) gespeichert sind.

    Nun soll in einer Abfrage nach allen Vorgängen (egal ob aus A, B, ...) gefragt werden, die zu einer Unternehmens-ID gehören. Das bekomme ich hin. Quasi mit:
    PHP-Code:
    SELECT datapool.id_undatapool.id_apdatapool.name
    FROM 
    (SELECT id_unid_apname FROM `vorgaenge_a`
    UNION
    SELECT id_un
    id_apname FROM `vorgaenge_b`) datapool
    WHERE id_un 
    $id_un 
    Mir werden damit auch die in den Vorgängen hinterlegten IDs der Ansprechpartner (id_ap) ausgegeben.
    Nun würde ich gerne einen JOIN machen um in meiner Ausgabe den Namen des Ansprechpartners anzeigen zu können und nicht nur seine ID.
    Eine Lösung ohne der UNION von oben habe ich bereits so realisieren können:
    PHP-Code:
    SELECT a.id AS a_ida.name AS a_nameap.name AS ap_name
    FROM 
    `vorgaenge_aa
    LEFT JOIN ansprechpartner ap
    ON id_ap
    =ap.id
    WHERE a
    .id_un $id_un"; 
    Auch das läuft soweit!

    Jetzt habe ich verzweifelt versucht eine Kombination beider zu realisieren und habe das LEFT JOIN mal den SELECTS in den Klammern und mal nach datapool eingefügt. Hat aber alles nicht funktioniert.

    Weiß einer wie die korrekte Schreibweise wäre?

    Grüße
    kuchen


  • #2
    Code:
    SELECT sp.spalte1, sp.spalte2, sp.spalte3
    FROM (SELECT 1 AS spalte1, 2 AS spalte2, 3 AS spalte3) AS sp
    UNION
    SELECT sp2.spalte1, sp2.spalte2, sp2.spalte3
    FROM (SELECT 4 AS spalte1, 5 AS spalte2, 6 AS spalte3) AS sp2
    1. Die Spalten beider SELECT's des UNION müssen gleich heißen
    2. Die gleiche Anzahl haben
    Homepage: www.jplace.de

    Github: JohnnyDevNull

    Kommentar


    • #3
      Zitat von JPlace Beitrag anzeigen
      Code:
      SELECT sp.spalte1, sp.spalte2, sp.spalte3
      FROM (SELECT 1 AS spalte1, 2 AS spalte2, 3 AS spalte3) AS sp
      UNION
      SELECT sp2.spalte1, sp2.spalte2, sp2.spalte3
      FROM (SELECT 4 AS spalte1, 5 AS spalte2, 6 AS spalte3) AS sp2
      1. Die Spalten beider SELECT's des UNION müssen gleich heißen
      2. Die gleiche Anzahl haben
      Erstmal danke für deine Antwort, aber entweder du hast meine Frage nicht richtig gelesen, ich habe mich missverständlich ausgedrückt oder ich verstehe deine Antwort nicht.

      Deine beiden Punkte sind bei mir ja gegeben. Und die UNION funktioniert bei mir ja auch, so wie sie oben steht. Es geht mir um die Kombination des UNION Codes mit dem JOIN-Code. Da bekomme ich die Syntax einfach nicht hin.

      Gruß
      Andreas

      Kommentar


      • #4
        Zitat von kuchen Beitrag anzeigen
        Deine beiden Punkte sind bei mir ja gegeben. Und die UNION funktioniert bei mir ja auch, so wie sie oben steht. Es geht mir um die Kombination des UNION Codes mit dem JOIN-Code. Da bekomme ich die Syntax einfach nicht hin.

        Gruß
        Andreas
        select x,y,z from (select ... from table_a union all select ... from table_b) foo left join table_c on ...
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Zitat von akretschmer Beitrag anzeigen
          select x,y,z from (select ... from table_a union all select ... from table_b) foo left join table_c on ...
          Genau so hatte ich es mir auch gedacht. Weil es ja einfach am sinnvollsten ist. Hatte allerdings wieder nicht funktioniert. Ich habe dann einfach immer weiter an den Schreibweisen rumgebastelt bis es nun endlich läuft! Ich habe jetzt einfach überall die tabelle voran gestellt. Jetzt läufts.

          Danke

          Kommentar

          Lädt...
          X