# Select in einem Select



## heidiweber (6. Jan 2009)

Hallo,

vorweg: Ich arbeite unter Oracle.

Ich habe folgende 2 Tabellen:

Benutzer:
ID
vorname
Nachname

Jobs:
ID_Jobs
jobname
idRef_Angelegt
idRef_Freigegeben

Inhalt der Tabelle Benutzer:
1  Alfons     Schubeck
2  Dieter     Mueller
3  Hainer    Lauterbach
4  Luise      Mueller


Inhalt der Tabelle Jobs:
1  Job1   2   4
2  Job2   3   1


Jetzt benötige ich einen Select, der folgendes liefert (Beispielselect):

```
SELECT j.id_Jobs, j.jobname, b.vornameAngelegt, b.nachnameAngelegt, b.vornameFreigegeben, b.nachname.Freigegeben from benutzer b, jobs j
```

Wie muss der Select dazu aussehen? Ich habe schon mit einem Select in einem Select rumgespielt - aber nix geht

Dies ist ja kein Problem:

```
SELECT j.id_Jobs, j.jobname, b.vornameAngelegt, b.nachnameAngelegt from benutzer b, jobs j where b.idRef_Angelegt = j.ID_Jobs
```

Aber wie bekomme ich die anderen beiden Werte noch rein?

Vielen Dank
Grüße
Heidi


----------



## heidiweber (6. Jan 2009)

Dieser SQL macht das, was ich möchte:


```
select j.jobname, b.vorname as vornameAngelegt, b.nachname as nachnameAngelegt, vornameFreigegeben, nachnameFreigegeben
from jobs j, benutzer b, (select b.vorname as vornameFreigegeben, b.nachname as nachnameFreigegeben from jobs j, benutzer b where b.ID=j.id_freigegeben and j.id_angelegt=1) as tmp 
where b.ID=j.id_angelegt and j.id_angelegt=1
```

Was mich stört ist, dass man zweimal "j.id_angelegt=1" in der WHERE-Bedingung angeben muss. Oder geht dies nicht anders/besser?

Jemand vielleicht einen Vorschlag?

Vielen Dank
Grüße
Heidi


----------



## SlaterB (6. Jan 2009)

select j.name, bAn.name, bFrei.name 
from job j, benutzer bAn, benutzer bFrei
where bAn.id = j.anlegenId and bFrei.id = j.freigebenId


----------



## heidiweber (6. Jan 2009)

Der Knüller 

SQL kann so einfach sein...

Vielen lieben Dank für den super Tipp. Das schaut doch schon viel professioneller aus. 

Noch einen schönen Tag
Grüße
Heidi


----------



## heidiweber (9. Jan 2009)

Hallo,

schon wieder das nächste Problem.


```
select j.name, bAn.name, bFrei.name 
from job j, benutzer bAn, benutzer bFrei 
where bAn.id = j.anlegenId and bFrei.id = j.freigebenId
```

Bei diesem Select werden nur die Datensätze selektiert, bei denen in der Spalte "j.freigebenId" ein Wert auch in der Spalte "bFrei.id" gefunden wird. Es kann aber sein, dass j.freigebenId noch leer (hat dann als Defaultwert eine 0).

Ich benötige alle Datensätze der Tabelle job. Und falls die Spalte j.freigebenId den Wert 0 hat soll bFrei.name den Wert NULL oder "" haben. Diese Bedingung ist immer erfüllt: bAn.id = j.anlegenId

Ich hoffe ihr versteht was ich meine. Wie muss der Select dazu lauten?

Vielen Dak
Grüße
Heidi


----------



## SlaterB (9. Jan 2009)

für sowas gibts OUTER JOIN
http://infogoal.com/sql/sql-outer-join.htm


----------



## heidiweber (9. Jan 2009)

Vielen Dank für den super schnellen Tipp.

Kann das leider erst morgen ausprobieren.

Werde mich auf jedenfall nachmals melden

Wünsche dir noch einen schönen Abend

Liebe Grüße
Heidi


----------



## heidiweber (10. Jan 2009)

Super herzlichen Dank nochmal.

Habs mit einem OuterJoin hinbekommen

Wünsche dir noch ein schönes Wochenende

Liebe Grüße
Heidi


----------

