johannesk
Goto Top

Abfrage von Daten aus unterschiedlichen Tabellen

Ich würde ganz gerne Daten aus mehreren Tabellen mit Bedingungen anzeigen lassen.

Hallo zusammen,

ich bin derzeit in ACCESS dabei eine Maschinenliste in unserem Unternehmen zu pflegen. Wir haben die Daten aus SAP und möchten diese in ACCESS einfügen und ausgeben bzw. filtern. Warum wir das nicht in SAP machen? Ganz einfach, es haben nicht alle die benötigten Zugriffsrechte und man muss da auch mehrere Formulare aufrufen um an die gewünschten Informationen zu kommen.

Ich habe nun mehrere Tabellen erstellt, mir würde aber wahrscheinlich schon die Hilfe anhand diesem Beispiel reichen!

Tabelle 1: Maschinen
> MaschinenNr
> MaschinenBezeichnung
> StandortNr

Tabelle 2: Standorte
> Werk
> StandortNr
> StandortBezeichnung

In SAP ist es nun so, dass ich bei den Maschinen Eingenschaften nur die StandNr angezeigt bekomme, nicht aber die Bezeichnung.


Nun möchte ich mir einen Bericht erzeugen lassen, der mir folgende Sachen anzeigt:
> MaschinenNr
> MaschinenBezeichnung
> StandortNr
> StandortBezeichnung


In Access-Schulungsunterlagen (leider nicht meine) die ich hier liegen habe, steht irgendwas von Fremdschlüssel. Leider sind die Unterlagen auch mit Access 2000 erstellt, und ich arbeite hier mit 2010.

Content-ID: 162927

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

Ausgedruckt am: 26.11.2024 um 02:11 Uhr

mischn1980
mischn1980 18.03.2011 um 11:26:28 Uhr
Goto Top
Hi,

da erstellst du dir eine Abfrage.

In dieser Abfrage brauchst du einen INNER JOIN.

Sieht dann ca. so aus:

SELECT maschine.*, standort.* from maschine INNER JOIN standort ON (standort.maschinennr = maschine.maschinennr AND standort.standortnr = maschine.standortnr)


Die Abfrage nimmst du dann als Quelle für den Bericht.

Gruss

Michael
JohannesK
JohannesK 18.03.2011 um 11:49:17 Uhr
Goto Top
Hallo Michael,

so wie ich die Abfrage (mit meinen geringen SQL-Kenntnissen) verstehe, beziehst du dich in dem ON() Teil auf ein Feld Maschinennr in der Tabelle Standort. Oder verstehe ich das gerade falsch? Der Aufbau ist doch Tabelle.Feldname...

Aber das Feld habe ich halt nicht. In SAP kann ich mir die Daten nur einzeln zusammen suchen...
mischn1980
mischn1980 18.03.2011 um 11:59:04 Uhr
Goto Top
Du hast doch oben in dem ersten Post geschrieben, dass du die Werte in einer Tabelle getrennt hast.

In der Abfrage werden die Tabellen Maschinen und Standorte mit einander verknüpft. Mit dem ON werden die Datensätze zusammengeführt bei denen die Maschinennummer und die Standortnummer in beiden Tabellen gleich ist.

Du brauchst diese zwei Tabellen wie du oben beschrieben hast. Über den INNER JOIN ziehst du diese zwei Tabellen zu einer zusammen.

Gruss

Michael
bastla
bastla 18.03.2011 um 12:44:40 Uhr
Goto Top
Hallo JohannesK und willkommen im Forum!

Ist denn die Maschine anhand der "StandNr" zu identifizieren? Falls ja, kannst Du den Ansatz von mischn1980 reduzieren auf
<code tpye="plain">SELECT maschine.*, standort.* from maschine INNER JOIN standort ON standort.StandNr = maschine.StandNr;

Grüße
bastla
Biber
Biber 18.03.2011 um 13:26:44 Uhr
Goto Top
Moin JohannesK,

willkommen im Forum.
bastlas Ansatz ist vollkommen korrekt und ausreichend, du brauchst weder eine Zwischenabfrage noch zwei Tabellen zu einer zusammenfassen.

SELECT m.MaschinenNr,  m.MaschinenBezeichnung
               , m.StandortNr    , s.StandortBezeichnung
FROM Maschinen m,  Standorte s
WHERE m.StandortNr = s.StandortNr

Auch wenn ich von SAP soviel halte wie von Thunfischpizza aus der Dose - eigentlich sollte auch bei denen ausgeschlossen sein,
dass sich in der Maschinen-Tabelle Datensätze mit einer StandortNr befinden, die nicht in der Standort-Stammdaten gefunden wird.
Sollte das doch erlaubt oder zumindest Realität sein, dann halt statt des INNER JOINs einen LEFT JOIN.
SELECT m.MaschinenNr , m.MaschinenBezeichnung
               , m.StandortNr  , s.StandortBezeichnung
FROM Maschinen m LEFT JOIN Standorte s ON m.StandortNr = s.StandortNr

Grüße
Biber
JohannesK
JohannesK 20.03.2011 um 20:24:52 Uhr
Goto Top
Zitat von @Biber:
Auch wenn ich von SAP soviel halte wie von Thunfischpizza aus der Dose - eigentlich sollte auch bei denen
ausgeschlossen sein,

Naja, so viel halte ich da auch noch nicht von, habe aber auch erst seit zwei Wochen damit zu tun. Ist halt alles noch etwas fremd!

Bei dem ersten Beispiel von mischn ist es nicht so schön, dass man erst noch einen Parameterwert eingeben muss. Aber deine Abfrage funktioniert genau so wie ich mir das vorstelle!

Super!! Vielen dank nochmal!!!
JohannesK
JohannesK 22.03.2011 um 13:52:58 Uhr
Goto Top
Hallo zusammen,

leider funktioniert das bei mir immer noch nicht so richtig face-sad

Bei mir zu Hause war es kein Problem, hat wunderbar funktioniert aber hier in der Firma nicht mehr face-confused

Ich habe hier nun folgende Abfrage gebaut:
[quote]SELECT e.Equipment, e.Bezeichnung, e.Standort, s.Standort, s.Bezeichnung
FROM Equipment AS e LEFT JOIN Standort AS s ON e.Standort = s.Standort;[/quote]
Zur Erklärung: Equipment ist die Tabelle wo die Maschinen drin stehen und Standort halt die Standorte. In der Equipment ist das Feld Equipment die Zahl, über die eine Maschine eindeutig identifiziert werden kann, also hier auch mein Primärschlüssel. In der Tabelle Standorte habe ich keinen Primärschlüssel definiert.

Jetzt gibt es aber auch Maschinen in der Liste, bei denen kein Standort eingepflegt ist. Das Feld ist also leer.


Zusätzlich zu den Standorten kommt in Zukunft da noch zwei weitere Abfragen im ähnlichen Stil hinzu. Die Kostenstellen- und Arbeitsplatzbezeichnungen habe ich auch nur einzeln in externen Tabellen. Da kann es aber eigentlich nicht mehr vorkommen, das es leere Felder gibt.

Weiß da gerade jemand Rat???

grüße
Johannes
Biber
Biber 22.03.2011 um 16:52:00 Uhr
Goto Top
Moin JohannesK,

ich hatte doch in meinem letzten Kommentar zwei Statements zusammenphantasiert.
Eines mit dem INNER JOIN für den optimistischen Fall, dass SAP inzwischen mehr Grips hat als die Thunfischpizza aus der Dose,
und eines mit einem LEFT JOIN für den Fall, dass die immer noch so arbeiten wie wir es alle seit Erfindung der Alufolie kennen.

Hast du denn die LEFT-JOIN-Variante auch ausprobiert?

Grüße
Biber

P.S.
"Da kann es aber eigentlich nicht mehr vorkommen, das es leere Felder gibt."
Dieses "eigentlich" ist es ja, was die Anzahl der Beschäftigten in der IT-Branche verursacht...face-wink