Seite 1 von 1
Abfrage soll unvollständige Datensätze ausgeben
Verfasst: Mi 16. Dez 2020, 09:46
von Maltan
Hallo zusammen,
ich habe eigentlich nur eine kleine Bitte. Die gefilterten Daten (Formular Suche/Filterformular) und somit auch die Berichte die auf die Abfrage
"Abfr_Name_Datum_Bez" basieren sollten auch unvollständige Datensätze anzeigen.
Diese Abfrage ist für mich schon schwer zu deuten. Könnte mir bitte jemand den SQL-Code dieser Abfrage dementsprechend anpassen. Habe etwas von "INFULL" aufgeschnappt!? Vielen Dank im Voraus
gez. Murkser
libreforum.zip
Re: Abfrage soll unvollständige Datensätze ausgeben
Verfasst: Mi 16. Dez 2020, 18:32
von RobertG
Hallo Murkser,
das Ganze liegt daran, dass schlicht in einigen Tabellen keine Daten sind. Und wenn z.B. "Dienste" leer ist und Du verbindest diese mit anderen Tabellen, dann bekommst Du nur ein leeres Ergebnis raus. Du musst mit so etwas wie LEFT JOIN arbeiten. Dazu muss aber erst einmal klar sein, welches denn in Deinem Sammelsurium die Haupttabelle ist, die auf jeden Fall angezeigt werden soll.
Ich habe die Beziehungen einmal erstellt und komme darauf, dass genau die Tabelle "Dienste" die zentrale Tabelle ist. Ohne Inhalte in dieser Tabelle bleibt die Anzeige immer leer.
In die Tabelle gehört vor der Angabe des ganzen Filter-Inhaltes
Code: Alles auswählen
FROM "Dienste" LEFT JOIN "Personal" ON "Dienste"."Pers_id" = "Personal"."ID" LEFT JOIN "Schicht" ON "Schicht"."ID" = "Dienste"."Schicht_id" LEFT JOIN "Teams" ON "Teams"."ID" = "Dienste"."Teams_id"
Gruß
Robert
Re: Abfrage soll unvollständige Datensätze ausgeben
Verfasst: Do 17. Dez 2020, 07:11
von Maltan
Vielen Dank zunächst. Habe die Daten aus Datenschutzgründen gelöscht. Auch mit Daten wurden keine Datensätze in der Abfrage angezeigt. Ich versuche mit JOIN zum erfolgt zu kommen.
Re: Abfrage soll unvollständige Datensätze ausgeben
Verfasst: Do 17. Dez 2020, 07:42
von Maltan
Datensätze wurden nur angezeigt wenn der Datensatz vollständig war und keine leeren Felder enthielt
Re: Abfrage soll unvollständige Datensätze ausgeben
Verfasst: Do 17. Dez 2020, 07:56
von RobertG
Hallo Maltan,
mach zuerst einmal die Beziehung zwischen den Tabellen fertig.
Setze dann die Datenbank mit ein paar Dummydatensätzen wieder ins Netz, damit klar wird, was Du erwartest und was wirklich fehlt.
Wie beschrieben. Ohne Daten kann natürlich auch nichts angezeigt werden. Da kann jede(r) Helfer(in) nur im Trüben fischen.
Gruß
Robert
Re: Abfrage soll unvollständige Datensätze ausgeben
Verfasst: Do 17. Dez 2020, 09:46
von Maltan
Habe leider auch mit Beziehungen keine große Ahnung. Man hat mir hier einmal weitergeholfen mit einem Filter über eine Parameterabfrage (siehe SQL "Abfr_Name_Datum_Bez"). Ich glaube das heisst so. Dazu habe ich keine Beziehungen setzen müssen. Die Datenbank habe ich noch einmal mit Dummys angehängt. Zwei Datensätze, einer vollständig der andere unvollständig im Sinne der Parameterabfrage (siehe Bildanhang). Ebenfalls als Bildanhang die Ansichten des Filterformulars "Suche" und der Haupttabelle "Dienste" . Vielleicht gibt es ja für mich eine einfache Lösung auch die unvollständigen Datensätze im Suchformular ="Abfr_Name_Datum_Bez" anzueigen weil daraus auch mein Bericht gespeist wird.
Vielen Dank
Re: Abfrage soll unvollständige Datensätze ausgeben
Verfasst: Do 17. Dez 2020, 13:08
von RobertG
Hallo Maltan,
vermutlich suchst Du diesen Code für die Abfrage:
Code: Alles auswählen
SELECT "Dienste"."ID", "Dienste"."Datum", "Dienste"."Termin",
"Dienste"."Bemerkung", "Personal"."Name", "Schicht"."Bezeichnung",
"Teams"."Gruppe", "Schicht"."Reih_id"
FROM "Dienste"
LEFT JOIN "Personal" ON "Dienste"."Pers_id" = "Personal"."ID"
LEFT JOIN "Schicht" ON "Schicht"."ID" = "Dienste"."Schicht_id"
LEFT JOIN "Teams" ON "Teams"."ID" = "Dienste"."Teams_id",
"Filter" WHERE
( LOWER ( "Personal"."Name" ) LIKE LOWER ( "F_NAME" || '%' ) OR "F_NAME" IS NULL )
AND ( LOWER ( "Schicht"."Bezeichnung" ) LIKE LOWER ( "F_BEZEICHNUNG" || '%' ) OR "F_BEZEICHNUNG" IS NULL )
AND ( LOWER ( "Teams"."Gruppe" ) LIKE LOWER ( "F_GRUPPE" || '%' ) OR "F_GRUPPE" IS NULL )
AND ( "Dienste"."Datum" >= "F_DATUM_VON" OR "F_DATUM_VON" IS NULL )
AND ( "Dienste"."Datum" <= "F_DATUM_BIS" OR "F_DATUM_BIS" IS NULL )
AND ( "Dienste"."Termin" >= "F_TERMIN_VON" OR "F_TERMIN_VON" IS NULL )
AND ( "Dienste"."Termin" <= "F_TERMIN_BIS" OR "F_TERMIN_BIS" IS NULL )
ORDER BY "Dienste"."Datum", "Dienste"."Termin", "Schicht"."Reih_id" ASC
Mach' daraus einmal eine neue Abfrage und schau Dir das an.
Gruß
Robert