# [SQL] Doppelter Join aus der selben Tabelle & Feldnnamen



## theomega (23. Apr 2006)

Hallo Leute,
ich habe folgende Sitiuation:
1. Tabelle "data"
- dataid (Index, AUTO_INCREMENT)
- editorid (Index)
- creatorid (Index)

2. Tabelle "user"
- userid (Index, AUTO_INCREMENT)
- username (VARCHAR)
- userposts
- einige (ca. 20 weitere Felder)


Ich will jetzt alle Einträge aus der Data-Tabelle auslesen. Dabei ist editorid die ID des User der den Eintrag bearbeitet hat und creatorid die ID des User der den Eintrag erstellt hat. Mein Ansatz mit einem Doppelten LEFT Join geht auch

```
SELECT * FROM data 
LEFT JOIN user AS creator ON (creator.userid=data.creatorid)
LEFT JOIN user AS editor ON (editor.userid=data.editorid)
```

Das Problem ist jetzt: Wenn ich dann mit JDBC versuche das Feld "username" auszulesen weiß Java natürlich nicht ob ich jetzt den creator oder den editor meine. Wie komm ich jetzt getrennt an die daten der Benutzer hin?

Der Einzige Ansatz der mir bekannt ist:
Ich muss das Query so verändern:

```
SELECT data.*, creator.userid AS creatoruserid, creator.userposts AS creatoruserpost,creator.username AS creatorusername, [....], editor.userid AS editoruserid, editor.userposts AS editoruserposts
LEFT JOIN user AS creator ON (creator.userid=data.creatorid)
LEFT JOIN user AS editor ON (editor.userid=data.editorid)
```

Das ist aber extrem unhandlich, vor allem: Jedesmal wenn ich ein neues Feld in die user-tabelle einfüge muss ich das Query neu anpassen. Nachdem die Tabelle über 20 Felder enthält wird das Query auch extrem unhandlich.

Welche Alternativen gibt es?

Datenbank-Server ist MySQL ich würde aber Wert auf eine allgemein-gültige Löung legen.

Gruß
TO


----------



## theomega (11. Jun 2006)

*PUSH*, kann mir jemand helfen?


----------



## Guest (12. Jun 2006)

Keine Ahnung, was dabei rauskommen soll, aber versuche das hier 

```
SELECT userid, username, userposts, IF(creatorid,1,0) AS is_creator
FROM data, user
WHERE (editorid IS NOT NULL AND userid=editorid)
   OR (creatorid IS NOT NULL AND userid=creatorid)
```
IF(creatorid,1,0) liefert 1, wenn creatorid != NULL ist, sonst 0. Danach kannst du die unterscheiden.


----------



## SamHotte (12. Jun 2006)

Ich kapier nicht ganz, wozu du 2 JOINs machen möchtest - normal langt einer, wenn du 2 Tabellen verbindest. Den Rest würde ich über eine geeignete WHERE-Anweisung erledigen.


----------

