🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[gelöst] 3-Felder-Suche in einer Abfrage nicht korrekt?

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

[gelöst] 3-Felder-Suche in einer Abfrage nicht korrekt?

Beitrag von Pit Zyclade » So 9. Okt 2022, 18:35

Hallo Robert, (h :shock: allo andere Experten?)
Zurückkommend auf Deinen Vorschlag mit einer zusätzlichen Tabelle "Filter", kam mir nach erfolgreicher Suche nach 2 Feldern die Idee, noch mal dieses auf Suche nach 3 Feldern zu steigern. Die Filter-Tabelle zu erweitern, ist ja kein Problem, auch die SQL-Formulierung in der Abfrage war schnell ohne Protest verwirklicht:

SELECT "xxx"."*" FROM "xxx WHERE
( ( LOWER ( "Motiv" ) LIKE '%' || COALESCE ( ( SELECT LOWER ( "SucheMotiv" ) FROM "Filter" WHERE "Filter"."ID" = TRUE ), '' ) || '%' ) OR "Motiv" IS NULL )
AND
( ( LOWER ( "Material" ) LIKE '%' || COALESCE ( ( SELECT LOWER ( "SucheMaterial" ) FROM "Filter" WHERE "Filter"."ID" = TRUE ), '' ) || '%' ) )
AND
( ( LOWER ( "Serie" ) LIKE '%' || COALESCE ( ( SELECT LOWER ( "SucheSerie" ) FROM "Filter" WHERE "Filter"."ID" = TRUE ), '' ) || '%' ) )
ORDER BY "Motiv" ASC, "Serie" ASC

Aber kurioserweise geht die Suche nach 2 Filtereingaben ("SucheMotiv"=Hans , "SucheSerie"=Lieblingsmächen, "SucheMaterial"= (leer) nur scheinbar korrekt, obwohl ich im dritten Filterfeld nichts drin habe! Nach meinem Verständnis hätte ich aber dort etwas eingeben müssen, denn bei den 3 gefundene Datensätzen war das Feld "Material" in keinem Fall leer.

Folglich ist die SQL-Formulierung bezüglich Inhalt (nicht bezüglich der SQL-Form) falsch bzw. unzutreffend.
Mein Wunsch war, dass nur die Datensätze angezeigt werden, bei denen alle drei Suchfelder-Inhalte zutreffend sind.

Danke für Diskussion!

Pit

Gibt es vielleicht irgendeine SQL-Satz-Längenbeschränkung? Oder ist doch ein logischer Fehler in meiner "Suche"?
Zuletzt geändert von Pit Zyclade am Di 11. Okt 2022, 16:21, insgesamt 1-mal geändert.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: 3-Felder-Suche in einer Abfrage nicht korrekt?

Beitrag von RobertG » So 9. Okt 2022, 19:11

Die Suche, so wie Du sie anlegst, gilt bei leeren Eingaben für alle Felder:

Code: Alles auswählen

 LOWER ( "Serie" ) LIKE '%' || COALESCE ( ( SELECT LOWER ( "SucheSerie" ) FROM "Filter" WHERE "Filter"."ID" = TRUE ), '' ) || '%' 
heiß doch: Suche in "Serie" alles, was irgendwo den Begriff stehen hat, den ich in "SucheSerie" eingegeben hat. Ist "SucheSerie" leer, dann nimm einfach stattdessen einen leeren Text.

Code: Alles auswählen

COALESCE ((…), '' )
Sagt: Wenn der Inhalt in den Klammern NULL ist, dann Text ohne jegliche Ausdehnung - nicht NULL. Damit wird

Code: Alles auswählen

 LOWER ( "Serie" ) LIKE '%' || ''  || '%' 
also jeder beliebige Text abgefragt.

Das ist bei mir in dem Moment gewollt, weil ich so durch Auslassen des Suchbegriffs den gesamten Inhalt angezeigt bekomme. Mit dem Suchbegriff schränke ich den Inhalt ein. Wenn Du das nicht möchtest, dann musst Du COALESCE da raus nehmen. Dann kommt anschließend eben bei leeren Suchbegriffen

Code: Alles auswählen

LOWER ( "Serie" ) LIKE NULL
und das Ergebnis bleibt leer.
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Wanderer
* LO-Experte *
Beiträge: 909
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: 3-Felder-Suche in einer Abfrage nicht korrekt?

Beitrag von Wanderer » So 9. Okt 2022, 19:13

Was mir auffällt: Nur beim ersten Feld Mitiv hast Du die zusätzliche Abfrage auf NULL mit drin:

Code: Alles auswählen

OR "Motiv" IS NULL
Damit wird nach allen Datensätzen gesucht, die Deinen genannten Bedingungen entsprechen und bei denen etwas beliebiges in Material steht. (Und anscheinend gibt es da 3 Datensätze). Datensätze ohne Materialangabe fallen raus, dafür bräuchtest Du

Code: Alles auswählen

OR "Material" IS NULL
PS: Robert war schneller beim tippen :-)
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: 3-Felder-Suche in einer Abfrage nicht korrekt?

Beitrag von Pit Zyclade » Mo 10. Okt 2022, 15:07

Hallo Wanderer,
Wanderer hat geschrieben:
So 9. Okt 2022, 19:13
Was mir auffällt: Nur beim ersten Feld Mitiv hast Du die zusätzliche Abfrage auf NULL mit drin:

Code: Alles auswählen

OR "Motiv" IS NULL
Damit wird nach allen Datensätzen gesucht, die Deinen genannten Bedingungen entsprechen und bei denen etwas beliebiges in Material steht. (Und anscheinend gibt es da 3 Datensätze). Datensätze ohne Materialangabe fallen raus, dafür bräuchtest Du

Code: Alles auswählen

OR "Material" IS NULL
Leider NEIN! Das ist doch das Komische daran, dass gerade bei den drei resultierenden Datensätze, auf die Motiv und Serie zutreffen, steht unter Material "Ag" drin, sind also nicht leer und hätten nicht erscheinen dürfen!

Aber ich habe mal folgendes experimentell probiert und jeweils nach Sichern auch die DB geschlossen und neu aufgerufen:
1. Beim Motiv mal diese"Motiv" IS NULL rausgenommen. Das bewirkt gar keine Änderung im Resultat.
2. Wieder "Motiv" IS NULL reingenommen und jetzt man "Material" IS NULL entsprechen eingefügt. Aber auch hierbei ändert sich gar nichts!!!

Man muß noch wissen, in dieser Datenbank sind insgesamt nur 4 Datensätze ohne Inhalt unter Material. Aber diese wurden gar nicht in meiner Suche-Konstruktion angesprochen oder im Resultat gelistet.

Also muß mein Fehler irgendwoanders sein.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: 3-Felder-Suche in einer Abfrage nicht korrekt?

Beitrag von Pit Zyclade » Mo 10. Okt 2022, 15:27

Hallo Robert,

Diesmal konnte ich deinen obigen Darlegungen nicht folgen. Irgendwie rauschen die Sachen unübersichtlich vorbei.

Machen wir es mal anders herum, ich versuche mal meine Wünsche zu präzisieren:
1. Möglicht in ähnlicher Konstruktion wie bisher, weil ich sowohl Erfolg haben will, aber auch aus Vorhandenem was lernen möchte.
2. Wenn ich gar keinen Inhalt in den drei Felder der Filterdatei habe, möchte ich alle Datensätze erhalten.
3. Wenn ich ein (oder alle drei) Felder in der Filterdatei bestücke, möchte ich egal ob groß oder klein geschrieben, die zutreffenden Datensätze im Resultat haben.
4. Sollte ich in den Felder der Filterdatei eine Leerstelle eingegeben haben, dann dürften Datensätze herauskommen, bei denen in der Tat eine Leerstelle, z.B. zwischen Zeichen der betreffenden Felder vorkommen. (So war das doch bei meiner zu Recht unzutreffenden Reklamationsbeispiel "Lieblingsmärchen", als mit und ohne Leerstelle ganz korrekt alles war, nur ich hatte die Datenbank im Zwischenschritt nicht geschlossen.)

Also was konkret muss ich anders machen, damit alle drei Suchbegriffe so arbeiten (wie bei nur zweien, wo es korrekt geht)?
SQL hat sich nicht beschwehrt, was aber nur bedeutet, dass ich nicht gegen Regeln verstoßen habe. Aber irgendetwas habe ich falsch formuliert. Vielleicht andere oder mehr Klammern oder mehr getrennte Bereiche oder andere Verbindungswörter als "AND" ?
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: 3-Felder-Suche in einer Abfrage nicht korrekt?

Beitrag von RobertG » Mo 10. Okt 2022, 17:16

Du wolltest in Deinem Ursprungspost durch eine leere Eingabe
"SucheMaterial"= (leer)
erzeugen, dass Du nur Inhalte siehst, bei denen das Feld leer ist - also in der Regel NULL.

Wenn Du dies erreichen willst, dann darfst Du nicht mit COALESCE arbeiten. Dann erhältst Du bei der Auswahl von leeren Eingaben auch leere Felder (NULL). Und wenn alle 3 Felder leer sind, dann siehst Du nur noch eine Zeile zur Neueingabe von Daten. Du wirst aber nicht, wie eigentlich geplant, eine Möglichkeit haben, tatsächlich alle Datensätze zu Gesicht zu bekommen. Das geht dann ja nicht mehr über fehlenden Eingaben in der LIKE-Bedingung.
2. Wenn ich gar keinen Inhalt in den drei Felder der Filterdatei habe, möchte ich alle Datensätze erhalten.
Das schließt sich dann aus. Entweder Du kannst nach leeren Feldern suchen oder Du kannst bei leeren Feldern alle Daten sehen.
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: 3-Felder-Suche in einer Abfrage nicht korrekt?

Beitrag von Pit Zyclade » Di 11. Okt 2022, 16:19

Ich hatte Mühe, das Ganze zu begreifen. Aber kurioserweise geht jetzt alles so, wie ich es wollte.
Ich habe jetzt die Suche für alle drei Ziele gleich gestaltet.
SELECT "xxx"."*" FROM "xxx"
WHERE
( ( ( LOWER ( "Motiv" ) LIKE '%' || COALESCE ( ( SELECT LOWER ( "SucheMotiv" ) FROM "Filter" WHERE "Filter"."ID" = TRUE ), '' ) || '%' ) OR "Motiv" IS NULL ) )
AND
( ( ( LOWER ( "Material" ) LIKE '%' || COALESCE ( ( SELECT LOWER ( "SucheMaterial" ) FROM "Filter" WHERE "Filter"."ID" = TRUE ), '' ) || '%' ) OR "Material" IS NULL ) )
AND
( ( ( LOWER ( "Serie" ) LIKE '%' || COALESCE ( ( SELECT LOWER ( "SucheSerie" ) FROM "Filter" WHERE "Filter"."ID" = TRUE ), '' ) || '%' ) OR "Serie" IS NULL ) )
ORDER BY "Serie" ASC, "Motiv" ASC

Warum es jetzt geht und vorher nicht, bin ich nicht sicher dahintergekommen.
Möglicherweise habe ich beim Experimentieren, als ich die Inhalte der Felder in der Filtertabelle verändert habe, bei dem sehr empfindlichen Notebook irgendetwas mehrfach modifiziert. Das ist mir heute z.B. mit dem Haken von "true" im ID-Feld passiert, ohne dass ich es wollte. Ja, man muß sich immer wieder konzentrieren und langsam und sicher arbeiten, nicht husch-husch.

Vielen Dank für die vielen Anregungen,
von Pit
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

Wanderer
* LO-Experte *
Beiträge: 909
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: [gelöst] 3-Felder-Suche in einer Abfrage nicht korrekt?

Beitrag von Wanderer » Do 13. Okt 2022, 08:10

Auch eine gern gesehene Fehlerquelle: Leerzeichen im "leeren" Feld der Filtertabelle.

Ich habe meinen Kollegen deshalb einen Macro-Button "Alle Daten" erzeugt, der einfach die Filtertabelle löscht (jeweils NULL einträgt)

Hauptsache es funktioniert jetzt.

J.
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten