thetoxic
Goto Top

Mehrfach SQL-Abfrage auf eine Tabellenspalte

Ich beschäftige mich seit kurzem mit MS Acces 2007. Als Langzeitprojekt möchte ich mir eine Inventarisierungsdatenbank für ein Netzwerk einrichten.

Zu meinem Problem:

Ich habe 3 Tabellen mit folgenden Inhalten:
  • Hersteller
    • ID
    • Herstellername

  • INV_PC
    • ID
    • Prozessor
    • RAM
    • Hersteller_ID
    • Monitor_ID

  • INV_Monitor
    • ID
    • Modell
    • Größe
    • Hersteller_ID


Die Tabelle INV_PC ist über den Schlüssel Monitor_ID mit der Tabelle INV_Monitor und der Spalte ID verbunden. (Beziehung 1:n)
Die Tabelle INV_PC ist über den Schlüssel Hersteller_ID mit der Tabelle Hersteller und der Spalte ID verbunden. (Beziehung n:1)
Die Tabelle INV_Monitor ist über den Schlüssel Hersteller_ID mit der Tabelle Hersteller und der Spalte ID verbunden. (Beziehung n:1)

Ich möchte in einer Abfrage alle Informationen aus allen drei Tabellen abfragen. Ich weiss jedoch nicht wie ich den Hersteller per Inner Join mit beiden Tabellen vergleichen kann.
Die Ausgabe sollte schematisch folgendermaßen aussehen:

z.B.:
PC-ID Prozessor RAM PC-Hersteller Monitor-ID Modell Größe Monitor-Hersteller
1 AMD 2GB DELL 3 Syncmaster 22'' Samsung
2 Intel 1GB Acer 5 T1350 19'' Futjisu Siemens


Ich hoffe ihr versteh mein Problem und könnt mir helfen.

Content-ID: 140948

Url: https://administrator.de/contentid/140948

Ausgedruckt am: 21.11.2024 um 23:11 Uhr

maretz
maretz 19.04.2010 um 12:44:26 Uhr
Goto Top
select h.*, ipc.*, imon.* from hersteller h, inv_pc ipc, inv_monitor imon where h.id=ipc.hersteller_id and h.id=imon.hersteller_id

wo war jetzt das problem? Ok, wie du das in Access einbaust kann ich dir mangels Access nicht sagen - aber iirc. konnte man dort auch richtige SQL-Statements eintragen...

die alternative wäre
select h1.herstellername,h2.herstellername,... from hersteller h1, hersteller h2,... where ipc.hersteller_ID=h1.id and ipc.monitor_id=imon.id and imon.hersteller_id=h2.id
TheToxic
TheToxic 19.04.2010 um 13:43:03 Uhr
Goto Top
nene, so einfach war das nicht gemeint.

Ich möchte den Hersteller des Monitor´s und den Hersteller des PC´s ausgeben und beides in einer Abfrage. Dazu musst bedacht werden, dass jeder PC mehrere Monitore haben kann (deswegen auch die Beziehungen).

Die Ausgabe sollte schematisch folgendermaßen aussehen:

z.B.:
PC-ID Prozessor RAM PC-Hersteller Monitor-ID Modell Größe Monitor-Hersteller
1 AMD 2GB DELL 3 Syncmaster 22'' Samsung
2 Intel 1GB Acer 5 T1350 19'' Futjisu Siemens
MadMax
MadMax 19.04.2010 um 14:43:37 Uhr
Goto Top
Hallo TheToxic,

Access habe ich hier zwar nicht, aber folgender Befehl sollte da auch funktionieren:
select	pc.ID as PC_ID,
	pc.Prozessor,
	pc.RAM,
	hpc.Herstellername as PC_Hersteller,
	mon.ID as Monitor_ID,
	mon.Modell,
	mon.Größe,
	hmon.Herstellername as Monitor_Hersteller
from	INV_PC pc
	inner join INV_Monitor mon on pc.Monitor_ID = mon.ID
	inner join Hersteller hpc on pc.Hersteller_ID = hpc.ID
	inner join Hersteller hmon on mon.Hersteller_ID = hmon.ID

Das Prinzip ist jedenfalls, daß Du die Herstellertabelle zweimal in die Abfrage bringst, einmal mit INV_PC verknüpft und einmal mit INV_Monitor. Dann werden sie mit unterschiedlichen Alias versehen, damit sie auseinandergehalten werden können (hpc bzw. hmon).

Gruß, Mad Max
TheToxic
TheToxic 19.04.2010 um 15:43:44 Uhr
Goto Top
Vielen Dank für die schnelle Hilfe.
Ich musste den SQL-Syntax für Access noch ein wenig anpassen, aber nun geht es.

Hier der aktuelle Sytnax
select
	INV_PC.ID as PC_ID,
	INV_PC.Prozessor,
	INV_PC.RAM,
	hpc.Herstellername as PC_Hersteller,
	INV_Monitor.ID as Monitor_ID,
	INV_Monitor.Modell,
	INV_Monitor.Größe,
	hmon.Herstellername as Monitor_Hersteller
from
((INV_PC INNER JOIN INV_Monitor ON INV_PC.Monitor_ID = INV_Monitor.ID)
	INNER JOIN Hersteller AS hpc ON INV_PC.Hersteller_ID = hpc.ID)
	INNER JOIN Hersteller AS hmon ON INV_Monitor.Hersteller_ID = hmon.ID;