Access - eindeutige Abfrage
Markus Breuer
- datenbank
0 Vinzenz Mai0 Markus Breuer0 Rouven0 Markus Breuer0 Rouven
0 h-p ortner
0 Vinzenz Mai
Hallo,
ich bin vom Praktikumsplatz aus gezwungen mit Access 2003 zu arbeiten, habe jedoch keine Kenntnisse und habe den Auftrag bekommen aus einer großen Datenbank einige Abfragen zu erstellen.
Eine Abfrage zwischen zwei tabellen (1:n Beziehung) hat auch funktioniert aber das Problem ist, dass ich bei der Abfrage genauso viele datensätze in der Spalte aus Tabelle 1 habe wie in der Spalte aus Tabelle 2 obwohl in der Spalte aus tabelle 1 nur ein Datensatz hätte sein dürfen deshalb ja auch 1:n.
Die Tabellen sind so aufgebaut:
Tabelle 1 "Stichwörter"
Stiwo (Primärschlüssel) eindeutig
.
Tabelle 2 "Textkürzel"
Stiwo (Fremdschlüssel) nicht eindeutig
Textkürzel
.
Für die Abfrage verwende ich die Feldnamen Stiwo aus Tabelle 1 und Textkürzel aus Tabelle 2. Dazu benutze ich einen Parameter der über die Eingabe ein Stichwort sucht: Wie [Stiwo] & "*"
Aber so sieht die Abfrage hinterher aus:
Stiwo Textkürzel
Feu1 ab
Feu1 abc
Feu1 adf
Feu1 asw
Gewollt ist jedooch das Feu1 auf der linken Seite nur einmal auftaucht! Ist das irgendwie möglich
Schon mal danke im vorraus
Hallo
ich bin vom Praktikumsplatz aus gezwungen mit Access 2003 zu arbeiten,
das heißt, Dir wird die Möglichkeit geboten, Dich in Access 2003 einzuarbeiten. Das sind Kenntnisse, mit denen man etwas anfangen kann.
habe jedoch keine Kenntnisse
wovon?
[ ] keine SQL-Kenntnisse
[ ] keine Jet-SQL-Kenntnisse
[ ] keine VBA-Kenntnisse
[ ] keine Access-Kenntnisse
Eine Abfrage zwischen zwei tabellen (1:n Beziehung) hat auch funktioniert aber das Problem ist, dass ich bei der Abfrage genauso viele datensätze in der Spalte aus Tabelle 1 habe wie in der Spalte aus Tabelle 2 obwohl in der Spalte aus tabelle 1 nur ein Datensatz hätte sein dürfen deshalb ja auch 1:n.
das verstehst Du falsch :-)
1:n bedeutet hier, dass jedem Datensatz aus Tabelle 1 beliebig viele Datensätze aus Tabelle 2 zugeordnet sein können (auch 0 Datensätze).
Für die Abfrage verwende ich die Feldnamen Stiwo aus Tabelle 1 und Textkürzel aus Tabelle 2. Dazu benutze ich einen Parameter der über die Eingabe ein Stichwort sucht: Wie [Stiwo] & "*"
Aber so sieht die Abfrage hinterher aus:
Stiwo Textkürzel
Feu1 ab
Feu1 abc
Feu1 adf
Feu1 asw
Das sieht gut und richtig aus.
Gewollt ist jedooch das Feu1 auf der linken Seite nur einmal auftaucht!
Wieso? Wieso ist das gewünscht?
Ist das irgendwie möglich
Möglich ist fast alles. Typischerweise macht man sowas in der API, d.h. in Deinem Fall mit VBA. Erläutere bitte die Randbedingungen genauer. Was hast Du vor? Wozu soll das Ergebnis dienen?
Freundliche Grüße
Vinzenz
Hallo und danke für die interessanten Antworten.
Also erstmals habe ich einige Kenntnisse zu Access, weniger aber vorhandenes für SQL und relationale Datenbanken verstehe ich sehr gut also Beziehungen.
Also 1:n bedeutet einem Datensatz aus Tab1 >=0 Datensätze aus Tab2 zugeordnet.
Das Problem ist schwer zu beschreiben und ist mir auch erst beim anwenden aufgefallen. Also ich gebe jetzt z.b bei ausführen der Abfrage das Stichwort Feu1 ein,
zuerst werde ich mit 2 Tabellen eine Abfrage starten.
Tabelle Stiwo und Tabelle Fahrzeuge
dem Stiwo Feu1 sind genau 16 Fahrzeuge zugeordnet und jedes hat eine andere Bezeichnung soweit so gut, das sieht dann so aus:
Feu1 RTW
Feu1 RTW ohne...
. RTW mit... usw
.
hier bereits erstes Problem links 15 Datensätze zu viel sprich Feu1
soll ja 1:n sein naja das problematische folgt.
Nun nehme ich eine 3 Tabelle und zwar die Textkürzel wobei wieder einem Stiwo z.b Feu1 4 Textkürzel zugeordnet sind.
Die Abfrage läuft findet auch das richtige, jedoch werden mal eben aus eigentlich 16 Datensaätze 200 Datensätze vermutlich weil Access die 4 Textkürzel jedem Fahrzeug eins zugeordnethat und so jeder Textkürzel doppelt vorkommt verständlich? schwer zu erklären aber Resultat aus eigentlich 16 Datensätze werden 200.
Würde das so funktionieren wie ich mir das vorstelle und wie es gefordert wird, dann sehe dies so aus:
Feu1 RTW 1 ab
RTW 2 abc
RTW mit... def
RTW ohne... akn
.
.
.
Jetzt die Frage ist dies möglich, wenn ja wäre nice wenn jemand die Textstelle erläutern könnte wo dies beschrieben wird oder eine direkte Erklärung abgeben könnte.
Nochmals vielen Dank für die emsigen Antworten!
Gruß
Hello,
Feu1 RTW 1 ab
RTW 2 abc
RTW mit... def
RTW ohne... akn
.
.
.
na ja, DU machst einen ganz klaren Fehler, Access nicht: nach WELCHEM System möchtest du denn ab zu RTW 1 zuordnen? Offenbar hast du doch in der Datenbank abgelegt, dass zu Feul (1) die Einträge ab, abc, def, akn (:n) gehören. Selbiges für RTW. Also wo ist die Logik, nach der du entscheidest, dass ab zur RTW 1 gehört und nichts anderes?
MfG
Rouven
Hallo,
leider verstehe ich überhaupt nicht was du meinst und ich vermute nicht das es an mir bzw. der Datenbank liegt. Die Textkürzel haben keine Beziehung zu den Fahrzuegen sondern nur zu den Stichwörtern, jedoch liegt auch die Problematik darin, dass sobald in einer Tabelle mehrere Datensätze gefunden werden und in einer anderen weniger, sich die Datensätze verdreifachen. Um auf einer umkomplizierten Basis weiter zu debartieren sehe man sich doch einfach das Beispiel mit den zwei tabellen an.
---------------------------------------------------------------------
Feu1 Rtw 1
Feu1 Rtw 2
. .
. .
.
bis 16 bis 16
Problem!!
Feu1 RTW 1
RTW 2
RTW 3
.
bis 16
Erwünschtes Resultat!
Ich denke das Problem ist verständlich, freue mich auf weitere Antwort. Danke
Hello,
Feu1 RTW 1
RTW 2
RTW 3
.
bis 16
Erwünschtes Resultat!
dieses Ergebnis _KANN_ es in einer relationalen Datenbank nicht geben. Eine Relation, und nichts anderes ist dein Abfrageergebnis, besteht aus Tupeln, in deinem Fall besteht ein Tupel aus zwei Komponenten - IMMER. Wenn du Feul nur ein einziges Mal da stehen haben möchtest, dann musst du der Datenbank beibringen, wie es Datensätze zusammenfassen kann. GROUP BY Feul ist da das Stichwort - ABER: um gruppieren zu können müsstest du jetzt sagen, was mit RTW 1, ... passieren soll. Und da bleibt leider nichts. MySQL unterstützt ein GROUP CONCAT, das würde heißen:
Feul RTW 1, RTW 2, ...
...aber das suchst du ja auch nicht.
Also, ich kann versuchen das hier noch an drei Beispielen auszuführen, aber es ändert nichts an der Antwort: Dein Ergebnis ist mit einer Abfrage nicht erzielbar.
Typischerweise löst man sowas mit Skript-Logik:
MfG
Rouven
Hallo,
danke für die Antwort. Wie muss ich mir denn die zwei Abfragen vorstellen. Kannst du erklären wie das geht.
Nebenbei, was kann ich denn gegen die doppelten Einträge unternehmen. Also sobald ich die 3 Tabelle zur Abfrage hinzufüge, die mit den Textkürzel(Spalte: Textkürzel) macht mir Access aus 16 Datensätze, 200 obwohl in der Spalte Textkürzel nur 4 Datensätze dazu kommen.
Das ist das eigentliche Problem.
Es geht mir nur um die doppelten Datensätze bei manchen Abfragen bekomme ich 60.000 Datensätze obwohl es eigentlich die hälfte von Datensätze finden sollte.
Danke.
Hallo Markus,
Nebenbei, was kann ich denn gegen die doppelten Einträge unternehmen. Also sobald ich die 3 Tabelle zur Abfrage hinzufüge, die mit den Textkürzel(Spalte: Textkürzel) macht mir Access aus 16 Datensätze, 200 obwohl in der Spalte Textkürzel nur 4 Datensätze dazu kommen.
das hängt von der JOIN-Art ab. Möglicherweise erzeugst Du einen CROSS JOIN. Wenn im Abfrageeditor von Access zwischen den Tabellen keine Verbindungslinien existieren, dann hast Du einen CROSS JOIN.
Es geht mir nur um die doppelten Datensätze bei manchen Abfragen bekomme ich 60.000 Datensätze obwohl es eigentlich die hälfte von Datensätze finden sollte.
Wie wäre es, wenn Du uns die drei Beispieltabellen mit ein paar Beispieldatensätzen posten könntest. Die Tabelle mit den vier Datensätzen gern auch komplett. Dazu das von Dir gewünschte Ergebnis - und gern auch das von Dir verwendete SQL-Statement. Das von Dir erzeugte SQL-Statement kannst Du Dir im Abfrageeditor in der SQL-Ansicht ansehen, in die Zwischenablage kopieren und hier posten. Dann können wir Dir wahrscheinlich besser helfen.
Bitte beachte, dass Du z.B. in Berichten die von Dir gewünschte Darstellung problemlos bekommen kannst.
Freundliche Grüße
Vinzenz
Hallo,
vielen Dank für die kompetente Antwort, mal wieder ;).
Ich werde mich bemühen das Geschehnis näher zu bringen.
Bilder sagen mehr als tausend Worte, daher im Abfrageeditor erstellt:
http://www.250kb.de/u/070613/j/5b53aabd.jpg
so folgendes kommt dabei raus:
http://www.directupload.net/file/d/1092/kUPsyh89_jpg.htm
Dazu noch eine kleine Aufklärung:
Zu Feu3 gibt es 16 Gruppennamen (Fahrzeuge) und 4 Textkürzel
das Ergebnis besteht jedoch aus über 6000 Datensätzen.
Dazu eine passende Lösung und ich bin zufrieden :).
Danke
Gruß
Hallo Markus!
Würde das so funktionieren wie ich mir das vorstelle und wie es gefordert wird, dann sehe dies so aus:
Feu1 RTW 1 ab
RTW 2 abc
RTW mit... def
RTW ohne... akn
.
.
.
Jetzt die Frage ist dies möglich, wenn ja wäre nice wenn jemand die Textstelle erläutern könnte wo dies beschrieben wird oder eine direkte Erklärung abgeben könnte.
Kann es sein, dass da gar keine Abfrage sondern ein Bericht in der Form gefordert ist:
Feu1
RTW 1 ab
RTW 2 abc
RTW mit... def
RTW ohne... akn
.
.
.
Feu2
RTX 1 ab
RTX 2 abc
RTX mit... def
RTX ohne... akn
.
.
.
Viele Grüße
H-P Ortner
Hallo
Kann es sein, dass da gar keine Abfrage sondern ein Bericht in der Form gefordert ist:
das vermutete ich auch schon. Deswegen fragte ich Markus
Was hast Du vor? Wozu soll das Ergebnis dienen?
Freundliche Grüße
Vinzenz
Hallo Markus,
ich [...] habe jedoch keine Kenntnisse
ich hatte völlig vergessen, Dich auf die JOIN-Artikel in SELFHTML aktuell hinzuweisen. Damit kannst Du Dir ein paar Grundkenntnisse aneignen:
Einführung in Joins
Fortgeschrittene Jointechniken
Freundliche Grüße
Vinzenz