Markus Breuer: Access - eindeutige Abfrage

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

  1. 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

    1. 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ß

      1. 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

        --
        -------------------
        Eine Bilanz ist wie der Bikini einer Frau. Sie zeigt fast alles, aber verdeckt das Wesentliche  --  Günter Stotz, Regierungsdirektor des baden-württembergischen Wirtschaftsministeriums
        1. 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

          1. 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:

            • einen Teil nur anzeigen, wenn er sich gegenüber dem vorherigen Datensatz unterscheidet
            • zwei getrennte Abfrage: erst Feul suchen, dann alle Einträge zu Feul suchen.
            • ...

            MfG
            Rouven

            --
            -------------------
            He is entertaining both out of the car and in the car because if you tell him that a corner is almost flat then he is the guy who is going to try to take it flat even if it means shunting it the other side of it, he will come with the data and say 'hey, I may have crashed and destroyed the car, but I was flat-out'. That is an interesting quality that he has!  --  Team Member on Jacques Villeneuve
            1. 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.

              1. 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

                1. 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ß

      2. 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

        1. 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

  2. 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