Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

left join funktioniert nicht richtig

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von habak, 24 Mai 2013.

  1. habak

    habak Benutzer

    Hallo,

    als Anfänger habe ich folgendes Problem.
    In Tabelle 1 (tab1) habe ich Benutzer hinterlegt z.B.

    id name
    1 A
    2 B
    3 C
    4 D

    Weiterhin habe ich eine zweite Tabelle (tab2) in der Events und die teilnehmenden Benutzer an dem jeweiligen Event gespeichert werden z.B.

    id event_id name_id
    1 1 2
    2 1 3
    3 2 1

    Nun möchte ich für den Event mit der id=1 folgende Darstellung

    name name_id
    A Null
    B 2
    C 3
    D Null

    Dies wollte ich mit folgender Abfrage erreichen:

    select a.name, b.name_id
    from tab1 as a
    left join (tab2 as b on a.id=b.name_id)
    where b.id= 1

    Als Ergebnis erhalte ich aber

    name name_id
    B 2
    C 3

    Was mache ich denn falsch?

    Für Eure Hilfe schon im voraus vielen Dank.

    Gruß

    Habak
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Als Dir antwortender hab ich auch ein Problem: Deine Beschreibung paßt nicht zu den Daten.

    Vielleicht suchst Du einen left outer join:

    Code:
    test=*# select * from tab2;
     id | event_id | name_id
    ----+----------+---------
      1 |        1 |       2
      2 |        1 |       3
      3 |        2 |       1
    (3 rows)
    
    test=*# select tab1.name, tab2.name_id from tab1 left outer join tab2 on tab1.id=tab2.name_id ;
     name | name_id
    ------+---------
     A    |       1
     B    |       2
     C    |       3
     D    |
    (4 rows)
     
    -- oder
     
    test=*# select tab1.name, tab2.event_id from tab1 left outer join tab2 on tab1.id=tab2.name_id ;
     name | event_id
    ------+----------
     A    |        2
     B    |        1
     C    |        1
     D    |
    (4 rows)
    
    
     
  3. habak

    habak Benutzer

    Hallo akretschmer,

    vielen Dank für Deine Hilfe. Leider klappt das auch nicht mit outer Join, so wie ich es benötige.
    Diesmal die Beschreibung und Daten ohne Fehler.

    [​IMG]

    Mit der beschriebenen Abfrage bekomme ich immer das Ergebnis von tab3. Egal ob ohne oder mit outer join.
    Ich hätte aber gerne das Ergebnis von tab4 und dachte, dass dies mit der Abfrage so zu erreichen sei.

    Aber wie ist den die richtige Lösung.

    Vielen Dank für Deine Mühe.

    Gruß

    Habak
     
  4. habak

    habak Benutzer

    Hallo akretschmer,

    es liegt an der "where"-Klausel; diese Bedingung muss raus und in die "on"-Bedingung:

    left join (tab2 ON (tab.id = tab2,name_id AND tab2.event_id=1));

    Problem gelöst. Vielen Dank.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden