Funktion LOCATE in Base

classic Classic list List threaded Threaded
4 messages Options
Ansgar Machalický Ansgar Machalický
Reply | Threaded
Open this post in threaded view
|

Funktion LOCATE in Base

Hallo zusammen,

ich möchte in Base (LO 4.2.8.2) zwei Felder aus zwei verschiedenen
Tabellen vergleichen und herausfinden, ob der Inhalt des einen Feldes im
anderen enthalten ist. Beide Felder haben den Typ "Text".

Dazu benutze ich in einer Abfrage die Funktion LOCATE(). Erste Frage:
Gibt es eine sinnvollere Alternative?

Ich habe die odb-Datei hier hochgeladen:
https://www.wuala.com/ansgar.machalicky/Dokumente/LO-users/?key=jPG59LuMz6yP

Bei einem Test zwischen zwei Tabellen ("Mitglieder" und "Kinder")
funktioniert das ganz wunderbar, das Ergebnis ist 1 für die Fälle, in
denen der Text enthalten ist, und falls nicht, lautet es 0 (vgl. Abfrage
"LOCATE.Test02") Bei den eigentlichen Tabellen läuft's aber nicht: Es
wird für alle Fälle nur die 0 als Ergebnis ausgegeben, obwohl es
eindeutig einige Treffer gibt (LOCATE.Test04).

Woran könnte es liegen (das ist die zweite Frage..... )? Ich finde den
Fehler nicht. Müssen die Tabellen dazu in einer Relation zueinander stehen?
Ich hatte schon die Vermutung, dass die leeren Felder in der Spalte
Probleme machen könnten und habe sie deshalb mit dem Text "leer"
aufgefüllt, aber auch das bringt keine Besserung.

Dankbar für jeden Tipp,
Ansgar


--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Thomas-4 Thomas-4
Reply | Threaded
Open this post in threaded view
|

Re: Funktion LOCATE in Base

Hallo Ansgar,

Am 30.12.2014 um 12:00 schrieb Ansgar Machalický:

> Hallo zusammen,
>
> ich möchte in Base (LO 4.2.8.2) zwei Felder aus zwei verschiedenen
> Tabellen vergleichen und herausfinden, ob der Inhalt des einen Feldes im
> anderen enthalten ist. Beide Felder haben den Typ "Text".
>
> Dazu benutze ich in einer Abfrage die Funktion LOCATE(). Erste Frage:
> Gibt es eine sinnvollere Alternative?
>
> Ich habe die odb-Datei hier hochgeladen:
> https://www.wuala.com/ansgar.machalicky/Dokumente/LO-users/?key=jPG59LuMz6yP
>
> Bei einem Test zwischen zwei Tabellen ("Mitglieder" und "Kinder")
> funktioniert das ganz wunderbar, das Ergebnis ist 1 für die Fälle, in
> denen der Text enthalten ist, und falls nicht, lautet es 0 (vgl. Abfrage
> "LOCATE.Test02") Bei den eigentlichen Tabellen läuft's aber nicht: Es
> wird für alle Fälle nur die 0 als Ergebnis ausgegeben, obwohl es
> eindeutig einige Treffer gibt (LOCATE.Test04).
>
> Woran könnte es liegen (das ist die zweite Frage..... )? Ich finde den
> Fehler nicht. Müssen die Tabellen dazu in einer Relation zueinander stehen?
Ich denke schon, wie soll Base sonst wissen,was mit wem verglichen
werden soll? Das ist so völlig undefiniert. Du willst doch wissen, ob
eines der Mitglieder oder eines der Kinder einen Umsatz hatte. Mit den
vorhandenen Tabellen sieht es aber schlecht aus. Sinnvoll ist es, beim
Erfassen des Umsatzes die ID des Mitgliedes mit einzutragen.

 Wenn Du mal aus der letzten Spalte den Teil LCASE(
"Umsaetze"."Beguenstigter" )  als neue Spalte daneben stellst, wird
immer "ronan reynolds" angezeigt. Da sieht man, die drei Tabellen werden
hier irgendwie miteinander gemischt.

> Ich hatte schon die Vermutung, dass die leeren Felder in der Spalte
> Probleme machen könnten und habe sie deshalb mit dem Text "leer"
> aufgefüllt, aber auch das bringt keine Besserung.
>
> Dankbar für jeden Tipp,
> Ansgar
Viele Grüße
Thomas



---
Diese E-Mail wurde von Avast Antivirus-Software auf Viren geprüft.
http://www.avast.com


--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Robert Großkopf Robert Großkopf
Reply | Threaded
Open this post in threaded view
|

Re: Funktion LOCATE in Base

In reply to this post by Ansgar Machalický
Hallo Ansgar,
>
> Bei einem Test zwischen zwei Tabellen ("Mitglieder" und "Kinder")
> funktioniert das ganz wunderbar, das Ergebnis ist 1 für die Fälle, in
> denen der Text enthalten ist, und falls nicht, lautet es 0 (vgl. Abfrage
> "LOCATE.Test02") Bei den eigentlichen Tabellen läuft's aber nicht: Es
> wird für alle Fälle nur die 0 als Ergebnis ausgegeben, obwohl es
> eindeutig einige Treffer gibt (LOCATE.Test04).

Versuche einmal in LOCATE.Test04 eine Abfrage, die auch eine Verbindung
der erforderlichen Tabellen ermöglicht, z.B.

SELECT "Mitglieder"."Vater.Vorname", "Mitglieder"."Vater.Nachname",
LOCATE( LCASE("Mitglieder"."Vater.Nachname"), LCASE(
"Umsaetze"."Beguenstigter" ) ) AS "Nachname in Umsaetze?",
"Umsaetze"."Beguenstigter" FROM "Mitglieder" LEFT JOIN "Umsaetze" ON
"Mitglieder"."Vater.Nachname" = "Umsaetze"."Beguenstigter"

Bei Dir stehen die Tabellen nebeneinander. Da kann aus der Tabelle
"Umsaetze"."Beguenstigter" kein eindeutiger Wert kommen.

Gruß

Robert

--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Ralf Kestler Ralf Kestler
Reply | Threaded
Open this post in threaded view
|

Re: Funktion LOCATE in Base

In reply to this post by Thomas-4
Hallo Ansgar,

laut der Dokumantation der HSQLDB
(http://hsqldb.org/doc/guide/builtinfunctions-chapt.html#bfc_string_binary_functions)
gibt LOCATE die Position bei der String 1 in String2 beginnt, es wird
also kein Boolean zurückgegeben, ob er enthalten ist.

Eine Alternative wäre vielleicht IN:

SELECT name1 FROM t1 IN (SELECT name2 FROM t2 WHERE name = 'Name');

Wobei ich hier nur einen Namen beachtet habe.

Viele Grüße

Ralf


Am 30.12.2014 um 12:29 schrieb Thomas:

> Hallo Ansgar,
>
> Am 30.12.2014 um 12:00 schrieb Ansgar Machalický:
>> Hallo zusammen,
>>
>> ich möchte in Base (LO 4.2.8.2) zwei Felder aus zwei verschiedenen
>> Tabellen vergleichen und herausfinden, ob der Inhalt des einen Feldes im
>> anderen enthalten ist. Beide Felder haben den Typ "Text".
>>
>> Dazu benutze ich in einer Abfrage die Funktion LOCATE(). Erste Frage:
>> Gibt es eine sinnvollere Alternative?
>>
>> Ich habe die odb-Datei hier hochgeladen:
>> https://www.wuala.com/ansgar.machalicky/Dokumente/LO-users/?key=jPG59LuMz6yP
>>
>> Bei einem Test zwischen zwei Tabellen ("Mitglieder" und "Kinder")
>> funktioniert das ganz wunderbar, das Ergebnis ist 1 für die Fälle, in
>> denen der Text enthalten ist, und falls nicht, lautet es 0 (vgl. Abfrage
>> "LOCATE.Test02") Bei den eigentlichen Tabellen läuft's aber nicht: Es
>> wird für alle Fälle nur die 0 als Ergebnis ausgegeben, obwohl es
>> eindeutig einige Treffer gibt (LOCATE.Test04).
>>
>> Woran könnte es liegen (das ist die zweite Frage..... )? Ich finde den
>> Fehler nicht. Müssen die Tabellen dazu in einer Relation zueinander stehen?
> Ich denke schon, wie soll Base sonst wissen,was mit wem verglichen
> werden soll? Das ist so völlig undefiniert. Du willst doch wissen, ob
> eines der Mitglieder oder eines der Kinder einen Umsatz hatte. Mit den
> vorhandenen Tabellen sieht es aber schlecht aus. Sinnvoll ist es, beim
> Erfassen des Umsatzes die ID des Mitgliedes mit einzutragen.
>
>   Wenn Du mal aus der letzten Spalte den Teil LCASE(
> "Umsaetze"."Beguenstigter" )  als neue Spalte daneben stellst, wird
> immer "ronan reynolds" angezeigt. Da sieht man, die drei Tabellen werden
> hier irgendwie miteinander gemischt.
>
>> Ich hatte schon die Vermutung, dass die leeren Felder in der Spalte
>> Probleme machen könnten und habe sie deshalb mit dem Text "leer"
>> aufgefüllt, aber auch das bringt keine Besserung.
>>
>> Dankbar für jeden Tipp,
>> Ansgar
> Viele Grüße
> Thomas
>
>
>
> ---
> Diese E-Mail wurde von Avast Antivirus-Software auf Viren geprüft.
> http://www.avast.com
>
>


--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert