SQL Abfrage über zwei Tabellen

Nebuk

Lieutenant
Registriert
Sep. 2009
Beiträge
923
Hallo zusammen, ich habe ein Problem mit einer MYSQL Abfrage. Ich bin mir sicher, dass jemand das Problem lösen kann:

Und zwar habe ich zwei Tabellen User und OS:

in der User-Tabelle drinnen ist einen Primary Key Id_Nr, einen Vor- und einen Nachname, sowie einen Foreign Key Fk_OS
in der OS-Tabelle drinnen ist ein PK OS_id und der Name (des OS)

Nun möchte ich eine Abfrage starten, welche mir die Id_Nr, den Vornamen, den Nachnamen sowie der OS-Name ausgibt. (den OS-Namen möchte ich über den FK in der USER-Tabelle holen)

So sieht mein bisheriger Code aus:

Code:
SELECT t1.id_Nr, t1.vname, t1.nname, t2.osname FROM user as t1, os as t2 WHERE t1.nname = 'Huber';

Ausgegeben wird mir jeweils folgendes:

Code:
5 | Hans | Huber | Windows XP
5 | Hans | Huber | Windows Vista
5 | Hans | Huber | Windows 7
5 | Hans | Huber | Ubuntu Linux
5 | Hans | Huber | Linux Mint
5 | Hans | Huber | Mac OS X
...
Also im Prinzip findet er ja den User, aber er zählt bei diesem User jedes Betriebssystem einmal auf.

Was müsste ich da für eine Abfrage machen, damit er mir nur jeweils das dazugehörige Betriebssystem anzeigt?

Für eure Tipps danke ich euch schon mal im Voraus :)

Gruss Nebuk
 
Schau dir mal Joins an, damit kriegste das hin ;)
 
SELECT t1.id_Nr, t1.vname, t1.nname, t2.osname FROM user as t1, os as t2 WHERE t1.nname = 'Huber' AND (t1.id_nr = t2.id_nr);

Müsste so klappen. Natürlich klappts nicht wenn der User mehrere Betriebssysteme zugewiesen bekommen hat.
 
Zuletzt bearbeitet:
Code:
Wie wäre es mit:

SELECT t1.ID, t1.name, t2.osname
FROM user AS t1, OS as t2
WHERE t1.name = 'Huber' AND t1.fk_os = t2.os_id;
 
So in etwa:

PHP:
SELECT     USER.NAME, OS.NAME AS Betriebssystem
FROM         USER INNER JOIN
                      OS ON USER.Fk_OS = OS.OS_id
WHERE     (USER.NAME = 'Huber')

Grüße
 
So, hab mir mal die INNER JOIN angeschaut und ausprobiert. Genau so wollte ich es haben. Danke für den Hinweis! :D

edit: Huch... So viele Hinweise/Lösungen in der kurzen Zeit. Danke euch für die Hilfe! :D
 
Gibt mehrere möglichkeiten, wie oben erwähnt bsp mit JOIN's.
Lernst natürlich am meisten wenn du dich selbst damit beschäftigst und das problem aus eigene kraft löst.

Hmm also mit JOIN müsste es glaube ich so gehen...

SELECT id_Nr, vname, nname, osname
FROM user
LEFT JOIN os ON user.Fk_OS = os.OS_id
WHERE nname = 'Huber';
 
tach

1) da mysql nicht weiss was du genau suchst, kannst du das gleich mitgeben

SELECT t1.id_Nr, t1.vname, t1.nname, t2.osname FROM user as t1, os as t2 WHERE t1.nname = 'Huber' AND (t1.id_nr = t2.id_nr) ORDER BY t1.id_Nr ;

2) oder du machst es ganz einfach und gibst zu den oben genannten lösungen ein DISTINCT rein

SELECT DISTINCT t1.id_Nr, t1.vname, t1.nname, t2.osname FROM user as t1, os as t2 WHERE t1.nname = 'Huber' AND (t1.id_nr = t2.id_nr);
 
Zuletzt bearbeitet:
Zurück
Oben