Announcement

Collapse
No announcement yet.

wo ist der join? (sql)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • wo ist der join? (sql)

    Hallo ich wuerde mich freuen, wenn mir jemand folgendes
    erklaeren koennte:
    die lösung einer abfrage mittels eines subselects sieht so aus:

    ich will alle personen finden, die in keinem projekt mit mehr
    als 40% ihrer eigenen arbeitszeit beteiligt sind:

    select name
    from angest
    where 40>all

    (select proz_arb
    from ang_pro
    where ang_pro.angnr=angest.angnr)

    Das subquerie liefert augenscheinlich alle tupel aus der tabelle ang_pro, die die gleiche angnr haben, wie die, in der tabelle angest und projeziert die tupel auf deren proz_arb werte.

    Ja und?...
    was passiert dann damit, jetzt habe ich eine einspaltige
    tabelle mit allen proz_arb werten und kann diese werte
    daraufhin ueberprüfen, ob sie alle kleiner als 40 sind...
    gehen wir einmal davon aus, wir haben so einen angestellten,
    woher "weiss nun" die auessere abfrage, welchem namen
    aus angest sie diesen werten nun zuordnen soll?
    wo ist der join? warum klappt diese abfrage?

    Kann das jemand nachvollziehen?

    Gruss
    Jan

  • #2
    Es handelt sich um eine korrelierte Subquery (Für eine bessere Erklärung den Begriff einfach mal googlen).

    Code:
    SELECT name
    FROM angest
    WHERE 40 > ALL (SELECT proz_arb 
                    FROM ang_pro
                    WHERE ang_pro.angnr = angest.angnr
                   )
    Für jeden Eintrag (also jede Zeile) aus der Tabelle angest wird die Subquery ausgewertet. Und bei jeder Auswertung wird in der WHERE-Klausel der Subquery der Wert angest.angnr verwendet. Das ist der Wert der Spalte angnr der aktuellen Zeile von angest.

    Comment

    Working...
    X