2017-05-13 2 views
-2

Unten ist die Tabelle FakultätListe Fakultätsmitglieder, die kleiner oder gleich Gehalt als ihre Vorgesetzten haben durch SELF mit (RECURSIVE) JOIN

enter image description here

Dies ist die Abfrage Frage von meiner Aufgabe, die unten gezeigt wird:

Listen Sie Fakultätsmitglieder auf, die ein kleineres oder gleiches Gehalt als ihr Vorgesetzter haben. Notieren Sie die Sozialversicherungsnummer, den Nachnamen und das Gehalt der Fakultät und des Supervisors. (Tipp: Verwenden Sie eine rekursive join)

Dies ist, wie ich mich näherte, die unten gezeigt:

SELECT Faculty.FacSSN, Faculty.FacLastName, Faculty.FacSalary, Faculty.FacSupervisor, S.FacLastName, S.FacSalary 
FROM Faculty, Faculty S 
WHERE NOT Faculty.FacSSN = Faculty.FacSupervisor 
AND Faculty.FacSalary <= S.FacSalary 
AND NOT Faculty.FacLastName = S.FacLastName 
AND Faculty.FacSupervisor IS NOT NULL; 

Dies ist das folgende Ergebnis erhalte ich die unten

gezeigt

image

Ich bekomme das Ergebnis des Gehalts des Supervisors, das größer oder gleich dem Gehalt des Dozenten ist. Aber das Problem ist, dass ich auch das Ergebnis des Gehaltes eines Dozenten (das sind keine Supervisoren) größer oder gleich dem Gehalt eines anderen Dozenten ist.

Wie löse ich dieses Problem?

Kann jemand meinen SQL-Code korrigieren?

+0

Bitte lesen http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code -on-so-wenn-eine-Frage/285557 und die akzeptierte Antwort –

+0

Ich benutze Microsoft Access DBMS. – stranger

Antwort

0

Access unterstützt keine rekursiven Joins, Sie müssen das DBMS dafür wechseln. Siehe auch Is it possible to create a recursive query in Access?

Das heißt, dieses Problem scheint keine rekursiven Joins zu benötigen, da nur der direkte Supervisor benötigt wird, nicht die gesamte Hierarchie nach oben.

Blick auf Ihre Abfrage Ich bin mir nicht sicher, was Sie für die Verwendung WHERE NOT Faculty.FacSSN = Faculty.FacSupervisor (Es war niemand ihr eigener Supervisor), aber wenn Sie das zu WHERE S.FacSSN = Faculty.FacSupervisor ändern, sollte es funktionieren.

A gereinigt Version würde wie folgt aussehen:

SELECT F.FacSSN, F.FacLastName, F.FacSalary, F.FacSupervisor, S.FacLastName, S.FacSalary 
FROM Faculty AS F 
INNER JOIN Faculty AS S ON S.FacSSN = F.FacSupervisor 
WHERE F.FacSalary <= S.FacSalary 
Verwandte Themen