none
Textvergleich einzelner Wörter einer Spalte in 2 Tabellen RRS feed

  • Frage

  • Hi,

    wir haben folgendes Problem: Wir müssen aus T1.COL (VARCHAR) den Inhalt mit T2.COL (VARCHAR) vergleichen und zwar in der Art, dass jedes Wort der Spalte aus T1 mit dem der Spalte aus T2 gesucht wird.

    Beispiel: T1.COL  <-> T2.COL

    Das ist ein Text mit vielen Wörtern.   <->   Hier steht ein Text mit noch mehr Wörtern.

    Hier erwarten wir einen Treffer bei "ein", "Text", "mit", "Wörtern".

    Natürlichkönnte man das mit einer SP (CTE?) lösen. Lesen T1.COL und Splitten der Column in einzelne Wörter und diese dann mit einem CONTAINS oder so gegen T2.COL laufen lassen.

    Aber gibt eine Möglichkeit , das mit einem SQL-Befehl zu machne?


    Gruß Hipp

    Donnerstag, 15. September 2016 16:11

Antworten

  • Im Prinzip kann man da durchaus mit der Volltextsuche arbeiten. Da gibt es eine Mege netter Features wie "Nähe der Worte zueinander", "Reflexionsformen" oder schlicht überhaupt Treffer, klar.

    Man müsste dann jedoch die einzelnen gesuchten Wörter in der Tat mit "AND" in einen Suchstring packen. Das geht schon. Aber nicht unbedingt "schön", wie ich Stefan beipflichte. Mindestens dieser Teil macht sich mit einer CLR-basierten Funktion besser. Ob man dieses Zwischenergebnis dann weiter an die Volltextsuche oder direkt weiter per CLR sucht, kommt wohl auf die Menge der Daten an.


    Andreas Wolter (Blog | Twitter)
    MCSM: Microsoft Certified Solutions Master Data Platform/SQL Server 2012
    MCM SQL Server 2008
    MVP Data Platform
    www.SarpedonQualityLab.com | www.andreas-wolter.com

    • Als Antwort markiert Hipp1010 Donnerstag, 10. November 2016 09:04
    Donnerstag, 15. September 2016 18:11

Alle Antworten

  • Hi,

    nö, sowas ist mit einem SQL Statement nicht zu lösen und eine SP wäre hier IMHO auch eine schlechte Wahl.

    Schreib dir ein kleines Skript oder eine kleine .NET Anwendung, die das für dich erledigt. Das ist erheblich einfacher als SQL dafür zu vergewaltigen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 15. September 2016 16:26
    Moderator
  • Im Prinzip kann man da durchaus mit der Volltextsuche arbeiten. Da gibt es eine Mege netter Features wie "Nähe der Worte zueinander", "Reflexionsformen" oder schlicht überhaupt Treffer, klar.

    Man müsste dann jedoch die einzelnen gesuchten Wörter in der Tat mit "AND" in einen Suchstring packen. Das geht schon. Aber nicht unbedingt "schön", wie ich Stefan beipflichte. Mindestens dieser Teil macht sich mit einer CLR-basierten Funktion besser. Ob man dieses Zwischenergebnis dann weiter an die Volltextsuche oder direkt weiter per CLR sucht, kommt wohl auf die Menge der Daten an.


    Andreas Wolter (Blog | Twitter)
    MCSM: Microsoft Certified Solutions Master Data Platform/SQL Server 2012
    MCM SQL Server 2008
    MVP Data Platform
    www.SarpedonQualityLab.com | www.andreas-wolter.com

    • Als Antwort markiert Hipp1010 Donnerstag, 10. November 2016 09:04
    Donnerstag, 15. September 2016 18:11
  • Hi,

    vielen Dank. Hier geht es sicherlich um die schnellste Variante. Ein Programm dass die Eingabe-Datei durchgräbt steht natürlich im Raum. Es gibt 3 Ausgangs-Import-Dateien mit je 20.000 Sätzen A und weitere 50 Import-Zieldateien Z mit auch ca. 20.000 Zeilen. Alle könnten im CSV-Format vorliegen. Wir müssen hier ein Matching durchführen, dass die größt mögliche Übereinsimmung nach Anzahl der Wörter aus A die in einer Zeile in Z ausgibt. Die Frage ist, das über Matching / Regex in einem C#-Programm zu machen oder die Dateien einzeln in die DB zu laden und dort dann das Matching durchführt. Am Ende muss nämlich ein JOIN von A zu Z existieren mit der jeweils gefundenen TrefferAnzahl, um die Kombinationen dann weiterzuverarbeiten.


    Gruß Hipp

    Freitag, 16. September 2016 06:24