Probleme mit LEFT JOIN (mySQL)
franz
- datenbank
Servus!
kriege eine bestimmte LEFT JOIN Anweisung einfach nicht hin.
habe die Tabelle Gewerk:
gewerk_id int(11) Nein
gewerk_name varchar(255) Nein
gewerk_meister int(11) Nein 0
gewerk_vertreter int(11) Nein 0
gewerk_angelegt date Nein 0000-00-00
gewerk_ersteller int(11) Nein 0
Wie ihr seht gibt es pro Gewerk(Abteilung) einen Meister und einen Vertreter.
In den Spalten gewerk_meister und gewerk_vertreter sind allerdings nicht die Namen gespeichert sondern deren Personalnummer. Welche auf
Wenn ich nun die Tabelle Gewerk ausgeben lassen will, erhalte ich mit einem normalen SELECT * FROM gewerk aller Felder, allerdings mit Personalnummer der Meister und Vertreter - wie schaffe ich es, dass dort die Nachnamen, Vornamen stehen?
Mit folgendem Statement, erhalte ich zwar Werte allerdings nicht die die gewünscht sind:
-------------------------------------------------------------------
SELECT gewerk.gewerk_name, gewerk.gewerk_vertreter, personal.mit_nachname
FROM gewerk
LEFT JOIN personal
ON(gewerk_meister = personalnummer OR gewerk_vertreter = personalnummer) GROUP BY personal.mit_nachname
--------------------------------------------------------------------
ergebnis:
+-------------+------------------+--------------+
| gewerk_name | gewerk_vertreter | mit_nachname |
+-------------+------------------+--------------+
| Einkauf | 119163 | [NULL] |
| Vertrieb | 116279 | Müller |
| Werkstatt | 109621 | Hans |
| Produktion | 109621 | Franz |
+-------------+------------------+--------------+
Es stimmt zwar, dass Müller und Franz Vertreter sind, aber Hans ist Meister - taucht aber auch auf.
Danke für eure Hilfe!
gruß Franz
Es stimmt zwar, dass Müller und Franz Vertreter sind, aber Hans ist Meister - taucht aber auch auf.
klar, willst du laut sql-befehl ja auch nicht anders (im join sind zwei mit or verknüpfte bedingungen - die eine für die meister die andere für die vertreter)
wozu eigentlich die group-by-klausel?
Hallo franz!
Wenn ich nun die Tabelle Gewerk ausgeben lassen will, erhalte ich mit einem normalen SELECT * FROM gewerk aller
Felder, allerdings mit Personalnummer der Meister und Vertreter - wie schaffe ich es, dass dort
die Nachnamen, Vornamen stehen?
SELECT gewerk.gewerk_name,
gewerk.gewerk_vertreter,
personal.mit_nachname
FROM gewerk
LEFT JOIN personal
ON (gewerk_meister = personalnummer OR gewerk_vertreter = personalnummer)
GROUP BY personal.mit_nachname
ergebnis:
Ungestest und ohne Gewähr auf Richtigkeit:
Vorschlag A:
SELECT gewerk.gewerk_name,
gewerk.gewerk_meister,
a.mit_nachname AS 'Meister_Nachname',
gewerk.gewerk_vertreter,
b.mit_nachname AS 'Vertreter_Nachname'
FROM gewerk
LEFT JOIN personal AS a ON gewerk.gewerk_meister = a.personalnummer,
personal AS b ON gewerk_vertreter = b.personalnummer)
GROUP BY personal.mit_nachname
Vorschlag B:
SELECT gewerk.gewerk_name,
gewerk.gewerk_vertreter,
personal.mit_nachname
FROM gewerk
LEFT JOIN personal ON gewerk_vertreter = personal.personalnummer
GROUP BY personal.mit_nachname
Es stimmt zwar, dass Müller und Franz Vertreter sind, aber Hans ist Meister - taucht aber auch auf.
Was willst du eigentlich nun? Zu jedem Wert der Spalte gewerk.gewerk_meister und gewerk.gewerk_vertreter jeweils die passenden Nachnamen aus der Tabelle personal verknüpft mit der Spalte personal.personalnummer? Bzw. die Nachnamen von Meister und Vertreter oder nur die der Vertreter deren Personalnummern in der Tabelle gewerk stehen?
Grüsse,
Sky