Eine Spalte in einer Abfrage mehrmals verwenden

Hallo,
ich komme mit einer SQL Abfrage nicht weiter. Und zwar habe ich zwei Tabellen:
Mitarbeiter: ID, VorName,NachName,…
Vorschlaege: ID, Iniziator, Betreuer, Vorschlag, …
Die Felder Mitarbeiter und Vorgesetzter der Tabelle Vorschlage beinhalten jeweils die ID der Tabelle Mitarbeiter.

Nun Moechte ich in einer Abfrage den Vorschlag sowie den Nachname des Iniziators und des Betreuers ausgeben.

Mit zwei Abfragen war es kein Problem mit:

SELECT Vorschlage.Vorschlag, Mitarbeiter.NachName FROM Mitarbeiter, Vorschlage WHERE Mitarbeiter.ID=Vorschlage.Iniziator

und

SELECT Mitarbeiter.NachName FROM Mitarbeiter, Vorschlage WHERE Mitarbeiter.ID=Vorschlage.Betreuer

Nun moechte ich aber diese beiden Abfragen in einer Gestalten und komme nicht zum richtigen Ergebniss.

Vielen Dank schon mal und Viele Gruesse

Hallo

Versuche es mit leftjoin.

Wenn in Tabelle Mitarbeiter ein Feld mit einer eindeutigen ID exestiert, und auf diese in der Tabelle Vorschlaege verwiesen wird, kannst du die Daten verknüpfen.

Select * from Vorschlaege
left join Mitarbeiter as Vorgesetzter on Vorschlaege.Vorgesetzter = Vorgesetzter.ID
left join Mitarbeiter on Vorschlaege.Mitarbeiter = Mitarebeiter.ID

Willst du nicht alle Daten sondern nur einige kannst du auf die Daten wie folgt zugreifen.

Tabellenname.feld
Vorgesetzer.Nachname as NachnameVorgesetzter,
Mitarbeiter.Nachname as NachnameMitarbeiter

Viel Spaß noch

Hallo,

probier deine Abfrage so umzubauen das du mit UNION arbeiten kannst.

Könnte so funktionieren:

select betreuername=a.nachname, iniziatorname=c.nachname, b.vorschlag
from mitarbeiter a, vorschlag b, mitarbeiter c
where a.id = b.betreuer
and c.id = b.iniziator

ich gehe davon aus, dass du bei iniziator und mitarbeiter von derselben person sprichst und bei betreuer und vorgesetzter es sich um die selbe person handelt.
die syntax mit dem a, b und c als alias kann je nach datenbank mit der du arbeitest ein wenig abweichen.

Hallo Fritz,

spontane Idee wären zwei Subselects in denen Du jeweils die ID mit Namen ausliest und dann verknüpfst.

In etwa:

SELECT Vorschlag.Vorschlag, Subselect1.NachName AS Mitarbeiter, Subselect2.NachName AS Vorgesetzter
FROM Vorschlag, (SELECT ID, NachName FROM Mitarbeiter) Subselect1, (SELECT ID, NachName FROM Mitarbeiter) Subselect2
WHERE Vorschlag.Betreuer = Subselect1.ID
AND Vorschlag.Iniziator = Subselect2.ID

MfG Lars

Hi Fritz,
da sowohl die „einfachen“ Mitarbeiter (= Initiatoren) als auch die Betreuer in der selben Tabelle „Mitarbeiter“ stehen, musst du in der Abfrage diese Tabelle 2x ansprechen, mit verschiedenen Alias-Namen. Der Einheitlichkeit wegen habe ich auch der Tabelle Vorschlaege einen Alias verpasst.
Gruß
Thomas
################################

SELECT
 V.Vorschlag,
 M.VorName AS Mitarbeiter\_Vorname ,
 M.NachName AS Mitarbeiter\_Nachname ,
 B.VorName AS Betreuer\_Vorname ,
 B.NachName AS Betreuer\_Nachname 
FROM
 Vorschlaege AS V ,
 Mitarbeiter AS M ,
 Mitarbeiter AS B 
WHERE
 V.Iniziator = M.ID AND V.Betreuer = B.ID

Hallo,

in diesem Fall muss die Tabelle Mitarbeiter ein zweites Mal mit einem Alias (in meinem nachgestellten Beispiel: Mitarbeiter_1) verjoint werden.

In MS Access funktioniert folgendes SQL-Statement:

SELECT

Vorschlaege.ID,
Vorschlaege.Iniziator,
Mitarbeiter.Vorname,
Mitarbeiter.Nachname,
Vorschlaege.Betreuer,
Mitarbeiter_1.Vorname,
Mitarbeiter_1.Nachname,
Vorschlaege.Vorschlag

FROM (Vorschlaege INNER JOIN Mitarbeiter ON Vorschlaege.Iniziator = Mitarbeiter.ID)
INNER JOIN Mitarbeiter AS Mitarbeiter_1 ON Vorschlaege.Betreuer = Mitarbeiter_1.ID;

Mit anderen Datenbanken kann der Syntax des SQL-Statements leicht abweichen.

Kurze Erläuterung:

Tabelle 1: Vorschlaege
Tabelle 2: Mitarbeiter (Join zwischen Iniziator und ID)
Tabelle 3: Mitarbeiter (Join zwischen Betreuer und ID)

Für Rückfragen stehe ich gerne zur Verfügung.

schönen Gruß aus dem Berchtesgadener Land
Stefan

Hallo,
es sollte klappen wenn Du so tust, als wären Initiator und Betreuer in unterschiedlichen Tabellen, indem verschiedene Aliase vergebenwerden.
Etwa so:
SELECT Vorschlage.Vorschlag, ini.NachName, btr.Nachname
FROM Vorschlage, Mitarbeiter ini, Mitarbeiter btr
WHERE ini.ID = Vorschlage.Iniziator AND
btr.ID = Vorschlage.Betreuer
Gruß
Erhard

Hallo Fritz,

Sorry für die späte Antwort, ich war auf Urlaub. Konntest du dein Problem inzwischen lösen oder brauchst du noch eine Antwort?

Schöne Grüße, Robert

Sorry, wegen Krankheit und Abwesenheit konnte ich die Frage nicht beantwoten. Ich nehme an, das hat sich mittlerweile erledigt!?

Sorry, aber Deien Fragen betreffen so ziemlich absolutes SQL Basiswissen. Ich glaube nicht, das diese Plattform dazu da ist solches Wissen zu vermitteln, zumal der Aufwand die Antworten zu formulieren aufwendiger ist, als dass Du schnell im Handbuch nachschlagen könntest.
Der Lerneffekt wäre dabei nicht zu unterschätzen.