Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 21

Thema: Inhalt von 2 Feldern aus 2 verschiedenen Tabellen vergleichen

  1. #1
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    33

    Inhalt von 2 Feldern aus 2 verschiedenen Tabellen vergleichen

    Ich habe mal wieder eine kleine "Aufgabe" für euch...

    Diesmal geht es darum das ich die inhalte von 2 Feldern aus 2 verschiedenen Tabellen auf übereinstimmung testen muss.

    Als Beispiel:

    tab1:
    Hat die Spalte "NAME" in welcher folgendes steht:

    Hr. Mark Waldhoff
    Thomas Wessel
    Mr. Thorsten Boddeutsch
    H. Beyer
    ...
    ...
    ...

    tab2:
    Hat die Spalte "NACHNAME" in welcher folgendes steht:

    waldhoff
    knipping
    kuntz
    beyer
    ...
    ...
    ...


    -----------------------------------------------------------------------

    Wie finde ich jetzt heraus ob z.B. der Inhalt des Felder tab2.NACHNAME in tab1.NAME vorkommt ???

    Als Ergebnis sollte sowas rauskommen:

    Waldhoff
    Beyer

    ...weil die beiden in beiden Tabellen vorkommen.
    Die Modellierung der tab1 ist natürlich nicht sehr vorteilhaft, aber es ist nunmal so und ich muss damit klar kommen. Besteht eine Möglichkeit die "doppelten" Datensätze raus zu bekommen ??? Dabei muss aber unbedingt auch darauf geachtet werden, das die Groß/Kleinschreibung egal ist und nicht beachtet werden soll.....

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    so evtl.?
    Habs nicht ausprobiert....

    PHP-Code:
    SELECT b.nachname FROM tab1 atab2 b WHERE LCASE(a.nameLIKE CONCAT('%',LCASE(b.nachname),'%'); 

  3. #3
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    33
    Zitat Zitat von michael.sprick
    so evtl.?
    Habs nicht ausprobiert....

    PHP-Code:
    SELECT b.nachname FROM tab1 atab2 b WHERE LCASE(a.nameLIKE CONCAT('%',LCASE(b.nachname),'%'); 
    Klappt leider nicht da mit CONCAT höchstens 2 Parameter verwendet werden können....

    Ich habs mal mit LIKE probiert aber das geht auch noch nicht so richtig:

    Select * from VITB03,WETX22 WHERE LOWER('%WETX22.NACHNAME%') LIKE LOWER(VITB03.NAME)

    Ich denke es liegt an den Hochkommas beim Nachnamen... er nimmt glaube ich nicht den wirklichen Inhalt vom Feld.... bzw. interpretiert er das nicht so wie ich es meine... er soll einfach den Nachnamen nehmen und dann (egal ob davor oder dahinter noch was steht) einfach diesen String mit dem Namen vergleich... wenn der String dann dort irgendwann vorkommt ist das ein Treffer.

  4. #4
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    Klappt leider nicht da mit CONCAT höchstens 2 Parameter verwendet werden können....
    Um welche Datenbank geht es?

    Ansonsten kannst Du CONCAT ja auch schachteln...

  5. #5
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    33
    Zitat Zitat von michael.sprick
    Um welche Datenbank geht es?

    Ansonsten kannst Du CONCAT ja auch schachteln...

    Ist eine ORACLE Datenbank.... hmm.... CONCAT schachteln ??? wie geht das ??? ...ich probier einfach mal ein bisschen rum...

  6. #6
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    33
    Hab jetzt sowas gemacht:

    select b.nachname FROM VITB03 a, WETX22 b WHERE LOWER(a.name) LIKE CONCAT('%',CONCAT(LOWER(b.nachname),'%'))


    funktioniert aber auch noch nicht....

  7. #7
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    gibts denn ´ne Fehlermeldung?

    Konnte man bei Oracle Strings nicht auch mit einem Punkt verbinden? Also sowas in der Art:

    PHP-Code:
    ... like '%' b.nachname .'%' ... 

  8. #8
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Ich kann hier kein Oracle testen, aber in Postgres funktioniert folgende Abfrage:
    Code:
    select a.* from c1 a, c2 b where lower(b.name) like '% ' ||a.nachname;
    Du solltest allerdings auf Nummer sicher gehen und nicht nach '%nachname' fragen, sondern nach '% nachname'. Das Leerzeichen ist wichtig, sonst kommen falsche Übereinstimmungen raus, denn '%meier' findet sich in 'Obermeier', '% meier' hingegen nicht.
    Und ich würde auf keinen Fall ein % am Ende machen. Der Nachname kommt immer am Ende vor, also kann danach nichts mehr kommen. (normalerweise )
    Dopplungen kriegst du mit select distinct raus.

    edit: laut
    http://sqlzoo.net/howto/source/z.dir/tip725372/oracle
    müsste es so funktionieren.
    Geändert von mwanaheri (23-06-2005 um 10:05 Uhr)
    Das Ziel ist das Ziel.

  9. #9
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    33
    Zitat Zitat von mwanaheri
    Ich kann hier kein Oracle testen, aber in Postgres funktioniert folgende Abfrage:
    Code:
    select a.* from c1 a, c2 b where lower(b.name) like '% ' ||a.nachname;
    Du solltest allerdings auf Nummer sicher gehen und nicht nach '%nachname' fragen, sondern nach '% nachname'. Das Leerzeichen ist wichtig, sonst kommen falsche Übereinstimmungen raus, denn '%meier' findet sich in 'Obermeier', '% meier' hingegen nicht.
    Und ich würde auf keinen Fall ein % am Ende machen. Der Nachname kommt immer am Ende vor, also kann danach nichts mehr kommen. (normalerweise )
    Dopplungen kriegst du mit select distinct raus.

    edit: laut
    http://sqlzoo.net/howto/source/z.dir/tip725372/oracle
    müsste es so funktionieren.



    Habs ausprobiert und auf einen Kunden beschränkt der in beiden Tabellen vorkommt:

    select a.* from WETX22 a, VITB03 b where lower(b.name) like '% ' ||a.nachname AND b.KD_NR='060925'

    So siehts in den beiden Tabellen aus:
    WETX22 --> strodthoff
    VITB03 --> frau strodthoff

    eigentlich müsste die Abfrage ein Ergebnis bringen, macht sie aber nicht...

  10. #10
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    Groß/Kleinschreibung beachtet?

    PHP-Code:
    lower(b.namelike '% ' ||a.nachname 
    vs.
    PHP-Code:
    lower(b.namelike '% ' ||lower(a.nachname

  11. #11
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    33
    Zitat Zitat von michael.sprick
    Groß/Kleinschreibung beachtet?

    PHP-Code:
    lower(b.namelike '% ' ||a.nachname 
    vs.
    PHP-Code:
    lower(b.namelike '% ' ||lower(a.nachname

    Ja, habe ich jetzt auch schon im nachhinein ausprobiert:

    Code:
    select a.* from WETX22 a, VITB03 b where LOWER(b.name) like '% ' ||LOWER(a.nachname) AND b.KD_NR='060925'
    Funktioniert aber immernoch nicht... an dem AND kann es auch nicht liegen, oder ?

  12. #12
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    Ob es an dem AND liegt, müsstest Du ja feststellen können, wenn du die Bedingung einfach umdrehst, also

    Code:
    select a.* from WETX22 a, VITB03 b where b.KD_NR='060925' AND TO_LOWER(b.name) like '% ' || TO_LOWER(a.nachname);
    bzw. lass das mit der Kundennummer doch einfach mal weg - dann müsstest Du ja acuh mindestens 1 Ergebnis sehen.

    BTW: Ist b.KD_NR char? Ich frag nur, weil Du die nummer in Quotes setzt ''...

  13. #13
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    33
    Zitat Zitat von michael.sprick
    Ob es an dem AND liegt, müsstest Du ja feststellen können, wenn du die Bedingung einfach umdrehst, also

    Code:
    select a.* from WETX22 a, VITB03 b where b.KD_NR='060925' AND TO_LOWER(b.name) like '% ' || TO_LOWER(a.nachname);
    bzw. lass das mit der Kundennummer doch einfach mal weg - dann müsstest Du ja acuh mindestens 1 Ergebnis sehen.

    BTW: Ist b.KD_NR char? Ich frag nur, weil Du die nummer in Quotes setzt ''...

    Ja, KD_NR ist char... so langsam bin ich wirklich am verzweifeln... nix funktioniert....

  14. #14
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    1) gibt es eine Fehlermeldung oder gibt die Datenbank keine Zeile zurück?
    2) Teste bitte die Bedingungen einzeln:
    - klappt die Frage nach der Kundennummer (ohne die anderen Bedingungen)
    - klappt die Frage nach der Namensgleichheit? (Wenn du nicht zu viele Ergebnisse zurückkriegen willst, setze limit 10)
    3) vielleicht hilft es, wenn du hier noch mal die Tabellenstrukturen postest. -- ohne Daten, versteht sich.
    Das Ziel ist das Ziel.

  15. #15
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    33
    Zitat Zitat von mwanaheri
    1) gibt es eine Fehlermeldung oder gibt die Datenbank keine Zeile zurück?
    2) Teste bitte die Bedingungen einzeln:
    - klappt die Frage nach der Kundennummer (ohne die anderen Bedingungen)
    - klappt die Frage nach der Namensgleichheit? (Wenn du nicht zu viele Ergebnisse zurückkriegen willst, setze limit 10)
    3) vielleicht hilft es, wenn du hier noch mal die Tabellenstrukturen postest. -- ohne Daten, versteht sich.
    1) Die Datenbank gibt keine Zeilen zurück: "No rows returned"

    2) Ich kann die Kundennummern jeweils einzeln abfragen und bekomme auch Ergebnisse:

    Code:
    select LOWER(NACHNAME) from WETX22 where WETX22.KUNDENNUMMER = '060925'
    ERGEBNIS: strodthoff

    Code:
    select LOWER(NAME) from VITB03 where VITB03.KD_NR = '060925'
    ERGEBNIS: frau strodthoff

    Die Frage nach der Gleichheit funktioniert nicht, das ist ja mein Problem... ich habe das ganze jetzt mal ohne die Schlussbedingung getestet und bekomme dabei auch keine Daten zurück:

    Code:
    select a.* from WETX22 a, VITB03 b where LOWER(b.name) like '% ' ||LOWER(a.nachname)

    3) Tabellenstruktur:

    WETX22
    ANSPRECHPARTNER_ID NUMBER(10)
    NACHNAME CHAR(30)
    VORNAME CHAR(30)
    ANREDE CHAR(10)
    KUNDENNUMMER CHAR(6)

    VITB03
    KD_NR CHAR(6)
    NAME VARCHAR2(80)


    --> Könnte es daran liegen das es unterschiedliche Datentypen in den Tabellen sind ???
    Geändert von markwaldhoff (23-06-2005 um 13:18 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •