none
Vergleich von 2 Spalten in unterschiedlichen Tabellen RRS feed

  • Frage

  • Hallo zusammen,

    Leider konnte ich bislang keine Lösung für mein Problem finden, daher versuch ichs jetzt mal hier :)

    Folgendes Szenario:
    Ich habe 2 Tabellen, in denen in je einer Spalte ein Name steht. Tabelle 1 beinhaltet dabei die Namen, nach denen ich suchen möchte und Tabelle 2 ist der Ort, an dem ich suchen möchte. Am Ende hätte ich also gerne eine neue Tabelle, in der alle Einträge aus Tabelle 2 sind, die ich auch in Tabelle 1 finden konnte.
    Kleines Problem dabei: Die Namen werden auch immer wieder unterschiedlich geschrieben (ss - ß, ae - ä, zweiter Name, usw.). Deswegen wär hier vielleicht auch sowas wie ein fuzzy search notwendig.
    Bislang habe ich das mit einem Fulltext Index und CONTAINS gemacht. Aber so bekomme ich natürlich die Unschärfen nicht mit ins Ergebnis.

    Kann mir hier jemand helfen/einen Tipp geben?

    Mittwoch, 21. Oktober 2020 08:05

Antworten

  • Hi,

    probier's mal hiermit:

    DECLARE @GesuchterName TABLE
    (
        [Name] [varchar](30) NULL
    )
    
    DECLARE @SuchTabelle TABLE
    (
        [Name1] [varchar](30) NULL
    )
    
    INSERT INTO @GesuchterName
    VALUES ('Anna Müller'), ('Bernhard Meyer'), ('Christoph Peter Lutz'), ('Doris Barth'), ('Emil Neumüller'), ('Friedrich Sass'), ('Gustaf Baum'), ('Heinrich Huß')
    
    INSERT INTO @SuchTabelle
    VALUES ('Anna Mueller'), ('Christoph Lutz'), ('Doris Barth'), ('friedrich Sass'), ('Gustav Baum'), ('Heinrich Huss'), ('Ida Hausmann'), ('Jutta Lauf'), ('Konrad Adenauer'), ('Ludwig Haus'), ('Martha Maus'), ('Nikolas Roth'), ('Otto Walkes'), ('Paula Ritz'), ('Rita Blocksberg'), ('Sebastian Knauf'), ('Torben Schmidt')
    
    SELECT g.Name,
           s.Name1
    FROM   @GesuchterName g
           INNER JOIN @SuchTabelle s ON SOUNDEX( g.Name ) = SOUNDEX( s.Name1 )

    Die Doku zu SOUNDEX findest Du in der MSDN. In deinem Fall könnte DIFFERENCE ggfs. auch noch hilfreich sein, um nicht nur phonetische Übereinstimmungen sondern auch ähnliche Werte zu finden.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Mittwoch, 21. Oktober 2020 10:18
    Moderator

Alle Antworten

  • Hi,

    poste bitte CREATE TABLE Statements für die Tabellen, INSERT INTO Statements für Beispieldaten und das gewünschte Ergebnis, basierend auf exakt diesen Beispieldaten.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Mittwoch, 21. Oktober 2020 08:42
    Moderator
  • Hi,

    ich hab die Tabellen mal etwas vereinfacht.

    Tabelle 1 mit den gesuchten Namen:

    create table GESUCHTERNAME(
    [Name] [varchar](30) NULL
    )

    Tabelle 2 mit den zu durchsuchenden Namen (hier gibt es theoretisch sogar 2 Spalten, in denen der Name stehen könnte. Trotzdem hier nur eine Spalte):

    create table SUCHTABELLE(
    [Name1] [varchar](30) NULL
    )

    insert into GESUCHTERNAME
    values ('Anna Müller'), ('Bernhard Meyer'), ('Christoph Peter Lutz'), ('Doris Barth'), ('Emil Neumüller'), ('Friedrich Sass'), ('Gustaf Baum'), ('Heinrich Huß')

    insert into SUCHTABELLE
    values ('Anna Mueller'), ('Christoph Lutz'), ('Doris Barth'), ('friedrich Sass'), ('Gustav Baum'), ('Heinrich Huss'), ('Ida Hausmann'), ('Jutta Lauf'), ('Konrad Adenauer'), ('Ludwig Haus'), ('Martha Maus'), ('Nikolas Roth'), ('Otto Walkes'), ('Paula Ritz'), ('Rita Blocksberg'), ('Sebastian Knauf'), ('Torben Schmidt')

    Als Ergebnis hätte ich gern folgende Namen:

    Anna Müller, Christoph Peter Lutz, Doris Barth, Friedrich Sass, Gustaf Baum, Heinrich Huß

    Vielleicht kann man das ja mit einer Wertung versehen, wie ähnlich sich die beiden Namen sind. 
    Ich bin neu im SQL Umfeld und kenn mich leider noch nicht so gut aus :(


    • Bearbeitet Shoura Mittwoch, 21. Oktober 2020 09:54
    Mittwoch, 21. Oktober 2020 09:53
  • Hi,

    probier's mal hiermit:

    DECLARE @GesuchterName TABLE
    (
        [Name] [varchar](30) NULL
    )
    
    DECLARE @SuchTabelle TABLE
    (
        [Name1] [varchar](30) NULL
    )
    
    INSERT INTO @GesuchterName
    VALUES ('Anna Müller'), ('Bernhard Meyer'), ('Christoph Peter Lutz'), ('Doris Barth'), ('Emil Neumüller'), ('Friedrich Sass'), ('Gustaf Baum'), ('Heinrich Huß')
    
    INSERT INTO @SuchTabelle
    VALUES ('Anna Mueller'), ('Christoph Lutz'), ('Doris Barth'), ('friedrich Sass'), ('Gustav Baum'), ('Heinrich Huss'), ('Ida Hausmann'), ('Jutta Lauf'), ('Konrad Adenauer'), ('Ludwig Haus'), ('Martha Maus'), ('Nikolas Roth'), ('Otto Walkes'), ('Paula Ritz'), ('Rita Blocksberg'), ('Sebastian Knauf'), ('Torben Schmidt')
    
    SELECT g.Name,
           s.Name1
    FROM   @GesuchterName g
           INNER JOIN @SuchTabelle s ON SOUNDEX( g.Name ) = SOUNDEX( s.Name1 )

    Die Doku zu SOUNDEX findest Du in der MSDN. In deinem Fall könnte DIFFERENCE ggfs. auch noch hilfreich sein, um nicht nur phonetische Übereinstimmungen sondern auch ähnliche Werte zu finden.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Mittwoch, 21. Oktober 2020 10:18
    Moderator
  • Ah mega gut. Damit kann ich arbeiten. SOUNDEX hab ich tatsächlich schonmal gehört, hatte ich aber gar nicht aufm Schirm.
    Vielen lieben Dank :)

    Mittwoch, 21. Oktober 2020 10:37