Wolfgang: MySql selfjoin Problem

Hallo!

Ich habe ein Problem mit einer Abfrage.
Meine Tabelle hat 4 Spalten: "id", "name", "eingeladenVon" und "rausgeworfenVon".
Die Spalten "eingeladenVon" und "rausgeworfenVon" enthalten eine Id aus der Spalte "id" bzw. können sie auch NULL sein.

Ich suche eine Abfrage die mir zusätzlich die Namen zu den Ids aus "eingeladenVon" und "rausgeworfenVon" zu einem Datensatz gibt.

Zum Beispiel gibt es die Datensätze
id, name  , eingeladenVon, rausgeworfenVon
1 , heidi , NULL        , NULL
2 , peter , 1           , NULL
3 , michel, 2           , 1

Wenn ich jetzt die Daten von "michel" möchte, sollen sie so aussehen:
id, name  , eingeladenVon, rausgeworfenVon, eingeladenVonName, rausgeworfenVonName
3 , michel, 2            , 1              , peter            , heidi

Mein Anfang sieht gerade so aus.

SELECT  
    `tbl1`.`id`,  
    `tbl1`.`name`,  
    `tbl1`.`eingeladenVon`,  
    `tbl1`.`rausgeworfenVon`,  
    `tbl2`.`name` AS `eingeladenVonName`  
FROM  
    `tbl` AS `tbl1`  
INNER JOIN  
    `tbl` AS `tbl2`  
ON  
    `tbl1`.`eingeladenVon` = `tbl2`.`id`  
WHERE  
    `tbl1`.`id` = 3

Leider bekomme ich damit einen leeren Datensatz wenn ich die id 2 suche und nur die id anstatt dem Namen wenn ich nach 3 suche.

Hat jemand einen Hinweis wo mein Fehler steckt?

Danke!

  1. Hallo Wolfgang,

    Mein Anfang sieht gerade so aus.

    SELECT

    tbl1.id,
        tbl1.name,
        tbl1.eingeladenVon,
        tbl1.rausgeworfenVon,
        tbl2.name AS eingeladenVonName
    FROM
        tbl AS tbl1
    INNER JOIN
        tbl AS tbl2
    ON
        tbl1.eingeladenVon = tbl2.id
    WHERE
        tbl1.id = 3

      
    
    > Leider bekomme ich damit einen leeren Datensatz wenn ich die id 2 suche und nur die id anstatt dem Namen wenn ich nach 3 suche.  
      
    Ich bin nicht ganz sicher, aber es könnte am inner join liegen. Ich vermute du möchtest eher einen left join, da dieser Datensätze mitnimmt, die in der verknüpften Tabelle den Wert NULL haben. [Schau mal hier.](http://answers.yahoo.com/question/index?qid=20070427082608AA7DwSh)  
      
    ciao  
    romy
    
    1. Hallo romy!

      Ich bin nicht ganz sicher, aber es könnte am inner join liegen. Ich vermute du möchtest eher einen left join, da dieser Datensätze mitnimmt, die in der verknüpften Tabelle den Wert NULL haben. Schau mal hier.

      Ja, daran lag es! Übrigens hatte ich am Anfang auch nicht die ID bekommen sondern den Namen. Ich hab da irgendwas verdreht.

      Danke vielmals!
      Wolfgang

  2. Tach!

    Meine Tabelle hat 4 Spalten: "id", "name", "eingeladenVon" und "rausgeworfenVon".
    Die Spalten "eingeladenVon" und "rausgeworfenVon" enthalten eine Id aus der Spalte "id" bzw. können sie auch NULL sein.
    Ich suche eine Abfrage die mir zusätzlich die Namen zu den Ids aus "eingeladenVon" und "rausgeworfenVon" zu einem Datensatz gibt.

    Nimm korrelierte Subselects (correlated subselect/subquery). Die sind in dem Fall einfacher anzuwenden und zu warten als Self-Joins.

    dedlfix.