Access-o-Mania

Access-Forum => Bericht => Thema gestartet von: Knoot am Juli 23, 2020, 18:24:57

Titel: Bericht schliesst wegen INNER JOIN-Abfrage Daten aus
Beitrag von: Knoot am Juli 23, 2020, 18:24:57
Hallo ihr Lieben

ich bin kompletter Anfänger und hab +/- null Ahnung von Access, brauche also dringendst einfache Anweisungen  ;)

Zum Problem: ein Bericht, der erbrachte Leistungen samt Medikamenten darstellen soll, schliesst leider die Leistungen aus, die keine Medikamente benötigen. Ich hab mich die letzten paar Tage etwas ins ganze INNER/OUTER-JOIN eingelesen, aber die ganzen Informationen prallen leider an mir ab, zufälliges LEFT/RIGHT-Einfügen bringt auch nix  ::)  ;D

hier die per Assistent erstellte Berichtsabfrage:

SELECT [UTab1_Rechnung].[RechnungsNr], [UTab1_Rechnung].[Datum], [Tab2_Kunden].[Anschrift], [UTab3_RLeistung].[Behandlungsatum], [UTab3_RLeistung].[Leistung], [UTab3_RLeistung].[Anzahl], [Tab4_Leistungen].[Bruttopreis_inkl_MWST], [UTab4_RMedikament].[Medikament], [UTab4_RMedikament].[Menge], [Tab3_Medikamente].[PV_arrondi], [UTab3_RLeistung].[RechnungsL] FROM ((Tab2_Kunden

INNER JOIN UTab1_Rechnung ON [Tab2_Kunden].[KundenID] =[UTab1_Rechnung].[Kunde])

INNER JOIN (Tab4_Leistungen

INNER JOIN UTab3_RLeistung ON [Tab4_Leistungen].[ID] =[UTab3_RLeistung].[Leistung]) ON [UTab1_Rechnung].[RechnungsNr] =[UTab3_RLeistung].[RechnungsNr])

INNER JOIN (Tab3_Medikamente

INNER JOIN UTab4_RMedikament ON [Tab3_Medikamente].[ProduktID] =[UTab4_RMedikament].[Medikament]) ON [UTab3_RLeistung].[RechnungsL] =[UTab4_RMedikament].[RechnungsL];



Der Bericht holt seine Infos hauptsächlich aus 3 Tabellen, die aus einem Formular mit mehreren Abfragen erstellt werden. Leistungen mit dazugehörigen Medikamenten werden angezeigt, der Bericht soll jetzt auch die zur jeweiligen Rechnungsnummer gehörenden Leistungen (UTab3_RLeistung.Leistung) ohne Medikamente (UTab4_Medikament.Medikament) darstellen.

Kann mir da jemand helfen, ich steh gerade komplett auf dem Schlauch  :(

Danke im Voraus

Euer Knoot
Titel: Re: Bericht schliesst wegen INNER JOIN-Abfrage Daten aus
Beitrag von: DF6GL am Juli 23, 2020, 18:31:49
HAllo,

ins Blaue geschossen:

.
.
.
INNER JOIN (Tab4_Leistungen

LEFT JOIN UTab3_RLeistung ON [Tab4_Leistungen].[ID] =[UTab3_RLeistung].[Leistung]) ON [UTab1_Rechnung].[RechnungsNr] =[UTab3_RLeistung].[RechnungsNr])
.
.



wobei ich die ON-Bedingungen nicht nachvollziehen kann.

Am Besten stellst Du die Verknüpfungsart im Abfrageentwurf ein.  ("Alle Daten aus Rechnungen und nur die aus Leistungen" )
Titel: Re: Bericht schliesst wegen INNER JOIN-Abfrage Daten aus
Beitrag von: Knoot am Juli 23, 2020, 20:13:00
Hui das ging ja schnell  ;)

Danke für die Antwort, aber eben, habs auch schon ins Blaue probiert, beim einfügen von LEFT kommt die Fehlermeldung "Join-Ausdruck nicht unterstützt"...das gleiche passiert wenn ich direkt bei den Beziehungen in den Eigenschaften den Typ verändere (alle Datensätze von x und nur die übereinstimmenden von y), also gleicher Fehler.

Kennt sich jemand mit der Klammerung in solchen Fällen aus? Hab irgendwo aufgeschnappt, dass Access da ab und zu etwas eigen sein kann  ::)

Liebe Grüsse
Titel: Re: Bericht schliesst wegen INNER JOIN-Abfrage Daten aus
Beitrag von: DF6GL am Juli 23, 2020, 21:20:26
Hallo,

ich hab Dir gesagt, den Abfrageentwurf zu bemühen.

Offensichtlich wird die "Verlinkungs-Konstruktion" so nicht akzeptiert. Die Verknüpfungen sollten  nur über Schlüsselfelder erfolgen...
Titel: Re: Bericht schliesst wegen INNER JOIN-Abfrage Daten aus
Beitrag von: crystal am Juli 23, 2020, 23:15:09
Auch mal nur ins Blaue gedacht:
Könnte es sein, dass die verlinkten Felder unterschiedliche Zahlenformate oder auf der linken Seite einen Standard-Wert haben?
Wenn "links" z. B. als Standard-Wert "0" steht, findet der Join natürlich keine passenden Datensätze "rechts" - auch keine leeren, weil "0" mit "Nichts" verglichen wird und das ist eben nicht gleich.

Bitte mal prüfen, denn es ist nur so eine spontane Idee...

Gruß,
crystal
Titel: Re: Bericht schliesst wegen INNER JOIN-Abfrage Daten aus
Beitrag von: Knoot am Juli 24, 2020, 01:43:07
Super, vielen Dank euch beiden, jetzt hab ich zumindest zwei Anhaltspunkte statt nur dauernd LEFT, RIGHT und INNER in verschiedenen Kombinationen wahllos einzusetzen  ::)

Mach mich morgen nach der Arbeit ans Werk, ich meld mich, so macht Access doch gleich mehr Spass  ;D
Titel: Re: Bericht schliesst wegen INNER JOIN-Abfrage Daten aus
Beitrag von: crystal am Juli 25, 2020, 15:08:26
Nochmal Hallo und ein kleiner Nachtrag,

es gibt leider nur sehr wenig Informationen dazu, wie Access Abfragen optimiert, wenn/bevor sie ausgeführt werden.
Ein einleitender Artikel dazu ist hier:

http://allenbrowne.com/QueryPerfIssue.html

Leider funktionieren nicht mehr alle Links in diesem Artikel.
Interessant fand ich aber z. B. den Hinweis (ganz am Ende):
ZitatAvoid multiple tables on the outer side of a JOIN, as JET can misinterpret these.

Dein konkretes Problem
Zitat von: Knootder Bericht soll jetzt auch die zur jeweiligen Rechnungsnummer gehörenden Leistungen (UTab3_RLeistung.Leistung) ohne Medikamente (UTab4_Medikament.Medikament) darstellen.

deutet m. E. darauf hin, dass der betreffende JOIN nicht "fruchtet", weil "links" und "rechts" eben keine übereinstimmenden Daten ("0" auf beiden Seiten) gefunden werden. Ich hatte Mal sowas ähnliches und habe mir damit beholfen, dass ich in der rechten Tabelle einen (sonst leeren) Datensatz mit dem Primärschlüssel "0" angelegt habe. Hier habe ich dann in einem beschreibenden Textfeld sowas wie "Dies ist ein Dummy" oder "noch keine Daten vorhanden" eingetragen, was die Situation ja auch gleich ersichtlich macht. Das ist aber u. U. etwas schwierig zu machen, wenn die "rechte" Tabelle als Primärschlüssel einen Autowert hat. Dann habe ich das eben kurzfristig auf "Zahl, Long Integer" geändert, um meinen Datensatz mit dem Primärschlüssel 0 anlegen zu können.

Probiere doch auch mal, deine Abfrage so zu reduzieren, dass sie nur noch diesen betreffenden JOIN beinhaltet. Erhälst du dann die gewünschten leeren Datensätze der zweiten Tabelle? Es könnte nämlich auch sein, dass Access bei mehr als 2 JOINS "etwas durcheinander gerät", wie im Internet nachzulesen ist und auch in diesem Forum bereits erläutert/diskutiert wurde...

Ich bin aber durchaus noch der Meinung, dass deine Abfrage funktionieren könnte, wenn du den Standard-Wert des Foreign-Key-Feldes in deiner "linken" Tabelle in der Tabellen-Definition rauslöschst und ggf. bei allen bereits vorhandenen Datensätzen dieser "linken" Tabelle den Wert "0" durch "" (Nix, Nada, Null) ersetzt (Achtung: bitte mit einer UPDATE-Abfrage, nicht mit einer LÖSCH-Abfrage!!!):
update tabelle1 set referenzfeld = null where referenzfeld = 0 (oder so ähnlich, bitte im Abfrage-Generator selbst machen und die Daten vorher sichern).

Viel Erfolg bei deinen Versuchen und
Gruß,
crystal