MySql selfjoin Problem
Wolfgang
- datenbank
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!
Hallo Wolfgang,
Mein Anfang sieht gerade so aus.
SELECT
tbl1
.id
,
tbl1
.name
,
tbl1
.eingeladenVon
,
tbl1
.rausgeworfenVon
,
tbl2
.name
ASeingeladenVonName
FROM
tbl
AStbl1
INNER JOIN
tbl
AStbl2
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
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
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.