Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: smartie am Januar 03, 2013, 19:19:23

Titel: zu viele Fälle durch Verknüpfung
Beitrag von: smartie am Januar 03, 2013, 19:19:23
Hallo zusammen,
ich bin neu hier und versuche mich in Access reinzuarbeiten, komme aber immer an der gleichen Stelle nicht mehr weiter...
Ich möchte gerne eine Abfrage erstellen, die bestimmte Daten aus 4 verschiedenen Tabellen filtert und ausgibt. Die vier Tabellen sollen über eine gemeinsame Variable verknüpft werden. Dabei ist eine der Tabellen gewissermaßen die "Haupttabelle", da sie mit den anderen 3 Tabellen per 1:n-Beziehung verknüpft ist. Wenn ich nur Variablen aus einer Tabelle abfrage, bekomme ich die gewünschte Anzahl an Fällen. Sobald zusätzlich Variablen aus den anderen Tabellen abgefragt werden, werden zusätzlich Fälle ausgegeben, die es meiner Meinung nach nicht geben dürfte  :'(
Hat jemand einen Tipp für mich??
Wäre echt super
Titel: Re: zu viele Fälle durch Verknüpfung
Beitrag von: DF6GL am Januar 03, 2013, 20:45:09
Hallo,


Du meinst mit Variablen vermutlich die (Schlüssel)Felder, über die die Tabellen miteinander in Beziehung stehen (sollen)


"werden zusätzlich Fälle ausgegeben, die es meiner Meinung nach nicht geben dürfte "

Welche Daten  erwartest Du aus dieser Stuation ?

Zeige mal die SQL (Abfrageentwurf/SQL-Ansicht) der Abfrage..
Titel: Re: zu viele Fälle durch Verknüpfung
Beitrag von: smartie am Januar 03, 2013, 21:13:09
SELECT PUF_Haushalte.hhid, PUF_Haushalte.h02, PUF_Haushalte.h04_3, PUF_Autos.vmid, PUF_Autos.h0411, PUF_Autos.klasse, PUF_Autos.anzfahrt, PUF_Autos.gesfkm, PUF_Autos.durchkm, PUF_Autos.gesfmin, PUF_Autos.durchmin, PUF_Personen.pid, PUF_Personen.hp_sex, PUF_Personen.hp_alter, PUF_Personen.hp_bkat, PUF_Personen.hp_besch, PUF_Personen.mobil, PUF_Personen.anzkm, PUF_Personen.anzmin, PUF_Personen.pergrup1, PUF_Personen.stich_j, PUF_Personen.stich_m, PUF_Personen.stichtag, PUF_Personen.stichwo, PUF_Personen.saison, PUF_Haushalte_1.hhgr06, PUF_Haushalte_1.hhgr14, PUF_Haushalte_1.hhgr18, PUF_Personen.polgk, PUF_Wege.wid, PUF_Wege.st_time, PUF_Wege.st_stdg, PUF_Wege.en_time, PUF_Wege.st_dat, PUF_Wege.en_dat, PUF_Wege.w04, PUF_Wege.hwzweck, PUF_Wege.w01, PUF_Wege.w13, PUF_Wege.w044, PUF_Wege.w05_5, PUF_Wege.pkw_f, PUF_Wege.pkw_mf, PUF_Wege.wegkm_k, PUF_Wege.wegmin_k, PUF_Wege.tempo
FROM PUF_Haushalte AS PUF_Haushalte_1, ((PUF_Haushalte INNER JOIN PUF_Autos ON PUF_Haushalte.hhid = PUF_Autos.hhid) INNER JOIN PUF_Personen ON PUF_Haushalte.hhid = PUF_Personen.hhid) INNER JOIN PUF_Wege ON PUF_Haushalte.hhid = PUF_Wege.hhid
GROUP BY PUF_Haushalte.hhid, PUF_Haushalte.h02, PUF_Haushalte.h04_3, PUF_Autos.vmid, PUF_Autos.h0411, PUF_Autos.klasse, PUF_Autos.anzfahrt, PUF_Autos.gesfkm, PUF_Autos.durchkm, PUF_Autos.gesfmin, PUF_Autos.durchmin, PUF_Personen.pid, PUF_Personen.hp_sex, PUF_Personen.hp_alter, PUF_Personen.hp_bkat, PUF_Personen.hp_besch, PUF_Personen.mobil, PUF_Personen.anzkm, PUF_Personen.anzmin, PUF_Personen.pergrup1, PUF_Personen.stich_j, PUF_Personen.stich_m, PUF_Personen.stichtag, PUF_Personen.stichwo, PUF_Personen.saison, PUF_Haushalte_1.hhgr06, PUF_Haushalte_1.hhgr14, PUF_Haushalte_1.hhgr18, PUF_Personen.polgk, PUF_Wege.wid, PUF_Wege.st_time, PUF_Wege.st_stdg, PUF_Wege.en_time, PUF_Wege.st_dat, PUF_Wege.en_dat, PUF_Wege.w04, PUF_Wege.hwzweck, PUF_Wege.w01, PUF_Wege.w13, PUF_Wege.w044, PUF_Wege.w05_5, PUF_Wege.pkw_f, PUF_Wege.pkw_mf, PUF_Wege.wegkm_k, PUF_Wege.wegmin_k, PUF_Wege.tempo
HAVING (((PUF_Haushalte.h02)=4) AND ((PUF_Personen.pid)=1) AND ((PUF_Personen.hp_bkat)=1) AND ((PUF_Personen.hp_besch)=1) AND ((PUF_Haushalte_1.hhgr06)=1) AND ((PUF_Haushalte_1.hhgr18)=2));

das ist der sql-text, den ich mit dem Abfrageentwurfassistenten erstellt habe. Der ist natürlich jetzt ziemlich unübersichtlich, weiß nicht ob du damit was anfangen kannst. Vermutlich liegt der Fehler, darin dass die Tabellenbeziehungen nicht ausreichend definiert sind. Kann das sein? Habe sie bisher nur über die Primärschlüssel verknüpfen können, die anderen Beziehungstypen kann ich größtenteils nicht verändern.
achja, letztendlich sollten im besten Fall die gesuchten Wegeinformationen  mit zugehörigen Informationen aus den anderen Tabellen ausgegeben werden. Bisher werden aber mehr Wege ausgegeben, als überhaupt in der Wegetabelle vorhanden sind.
Titel: Re: zu viele Fälle durch Verknüpfung
Beitrag von: Beaker s.a. am Januar 03, 2013, 22:13:32
Hallo smarty,
ZitatDer ist natürlich jetzt ziemlich unübersichtlich
Schaust Du hier:
http://www.dpriver.com/pp/sqlformat.htm (http://www.dpriver.com/pp/sqlformat.htm)
Dein SQL würde dann etwa so aussehen
SELECT puf_haushalte.hhid,
       puf_haushalte.h02,
       puf_haushalte.h04_3,
       puf_autos.vmid,
       puf_autos.h0411,
       puf_autos.klasse,
       puf_autos.anzfahrt,
       puf_autos.gesfkm,
       puf_autos.durchkm,
       puf_autos.gesfmin,
       puf_autos.durchmin,
       puf_personen.pid,
       puf_personen.hp_sex,
       puf_personen.hp_alter,
       puf_personen.hp_bkat,
       puf_personen.hp_besch,
       puf_personen.mobil,
       puf_personen.anzkm,
       puf_personen.anzmin,
       puf_personen.pergrup1,
       puf_personen.stich_j,
       puf_personen.stich_m,
       puf_personen.stichtag,
       puf_personen.stichwo,
       puf_personen.saison,
       PUF_Haushalte_1.hhgr06,
       PUF_Haushalte_1.hhgr14,
       PUF_Haushalte_1.hhgr18,
       puf_personen.polgk,
       puf_wege.wid,
       puf_wege.st_time,
       puf_wege.st_stdg,
       puf_wege.en_time,
       puf_wege.st_dat,
       puf_wege.en_dat,
       puf_wege.w04,
       puf_wege.hwzweck,
       puf_wege.w01,
       puf_wege.w13,
       puf_wege.w044,
       puf_wege.w05_5,
       puf_wege.pkw_f,
       puf_wege.pkw_mf,
       puf_wege.wegkm_k,
       puf_wege.wegmin_k,
       puf_wege.tempo
FROM   puf_haushalte AS PUF_Haushalte_1,
       ((puf_haushalte
         INNER JOIN puf_autos
                 ON puf_haushalte.hhid = puf_autos.hhid)
        INNER JOIN puf_personen
                ON puf_haushalte.hhid = puf_personen.hhid)
       INNER JOIN puf_wege
               ON puf_haushalte.hhid = puf_wege.hhid
GROUP  BY puf_haushalte.hhid,
          puf_haushalte.h02,
          puf_haushalte.h04_3,
          puf_autos.vmid,
          puf_autos.h0411,
          puf_autos.klasse,
          puf_autos.anzfahrt,
          puf_autos.gesfkm,
          puf_autos.durchkm,
          puf_autos.gesfmin,
          puf_autos.durchmin,
          puf_personen.pid,
          puf_personen.hp_sex,
          puf_personen.hp_alter,
          puf_personen.hp_bkat,
          puf_personen.hp_besch,
          puf_personen.mobil,
          puf_personen.anzkm,
          puf_personen.anzmin,
          puf_personen.pergrup1,
          puf_personen.stich_j,
          puf_personen.stich_m,
          puf_personen.stichtag,
          puf_personen.stichwo,
          puf_personen.saison,
          PUF_Haushalte_1.hhgr06,
          PUF_Haushalte_1.hhgr14,
          PUF_Haushalte_1.hhgr18,
          puf_personen.polgk,
          puf_wege.wid,
          puf_wege.st_time,
          puf_wege.st_stdg,
          puf_wege.en_time,
          puf_wege.st_dat,
          puf_wege.en_dat,
          puf_wege.w04,
          puf_wege.hwzweck,
          puf_wege.w01,
          puf_wege.w13,
          puf_wege.w044,
          puf_wege.w05_5,
          puf_wege.pkw_f,
          puf_wege.pkw_mf,
          puf_wege.wegkm_k,
          puf_wege.wegmin_k,
          puf_wege.tempo
HAVING ( ( ( puf_haushalte.h02 ) = 4 )
         AND ( ( puf_personen.pid ) = 1 )
         AND ( ( puf_personen.hp_bkat ) = 1 )
         AND ( ( puf_personen.hp_besch ) = 1 )
         AND ( ( PUF_Haushalte_1.hhgr06 ) = 1 )
         AND ( ( PUF_Haushalte_1.hhgr18 ) = 2 ) )

hth
gruss ekkehard
Titel: Re: zu viele Fälle durch Verknüpfung
Beitrag von: smartie am Januar 03, 2013, 22:29:35
danke für den tipp,das merk ich mir!Aber es wird an meinem eigentlichen Problem nicht viel geändert haben  ;)
Titel: Re: zu viele Fälle durch Verknüpfung
Beitrag von: DF6GL am Januar 04, 2013, 12:01:54
Hallo,

Du hast auch nicht diese Frage beantwortet:

ZitatWelche Daten  erwartest Du aus dieser Stuation ?