2017-04-19 1 views
0

Ich versuche, Daten in einer Spalte zu vergleichen, die in zwei verschiedenen Tabellen ist. Die beiden Tabellen sind viel mehr Spalten, aber der Einfachheit halber .....SQLITE Spalten in zwei Tabellen vergleichen, um LIKE Daten zu finden

CREATE TABLE A(
ID  integer PRIMARY KEY AUTOINCREMENT, 
name char(20) 
); 


CREATE TABLE B(
ID  integer PRIMARY KEY AUTOINCREMENT, 
name char(20) 
); 

INSERT INTO A(name) VALUES ('John Smith'); 
INSERT INTO A(name) VALUES ('J Doe'); 
INSERT INTO A(name) VALUES ('Jane Smith'); 

INSERT INTO B(name)VALUES('John Smith'); 
INSERT INTO B(name)VALUES('J. Doe'); 
INSERT INTO B(name)VALUES('jane smith'); 

Das meiste, was ich bisher gefunden habe war, die Unterschiede zwischen den Tischen zu finden, aber ich habe nicht finden verwaltet wie man ähnliche Daten zusammenbringt. Ich bin auf der Suche nach etwas, das Ergebnisse wie folgt ergeben wird:

Tabelle A         |   Tabelle B

John Smith     |   John Smith

Jane Smith     |   jane smith

J Doe     |   J. Doe

Der folgende Code abgestimmt mehrere Namen:

CREATE TABLE tblC (
tblAName char(20), 
tblBName char(20) 
); 

INSERT INTO tblC (tblAName, tblBName) 

SELECT 
tblA.name, 
tblB.name 

FROM tblA 
LEFT JOIN on tblB WHERE tblA.name LIKE tblB.name; 

Allerdings habe ich nicht herausgefunden, wie die Namen zu erhalten, die Satzzeichen enthalten. Dies hat nicht funktioniert:

INSERT INTO tblC (tblAName, tblBName) 

SELECT 
tblA.name, 
tblB.name 

FROM tblA 
LEFT JOIN on tblB WHERE tblA.name LIKE tblB.name 
WHERE tblA.name LIKE "%Xxx%" OR "%X.%" tblB.name LIKE "%Xxx%" OR "%X.%"; 
+0

Definieren Sie "ähnlich". –

+0

Mit ähnlich ich meine, wenn Tabelle A hat "John Smith" in das Feld Name, ich möchte, dass es in der Lage sein B, wo das Namensfeld enthält "JOHN SMITH", JOHN_SMITH "," JohnSmith "usw. – taylorbuckeye

+0

Sie haben ein paar Beispiele aufgelistet, aber nichts, was es erlauben würde, einen Algorithmus zu spezifizieren –

Antwort

0

Um bestimmte Zeichen zu ignorieren, entfernen Sie sie mit replace() bevor die Vergleiche zu tun. Um den Fall zu ignorieren, verwenden Sie LIKE oder COLLATE. NOCASE:

SELECT A.name, 
     B.name 
FROM A 
JOIN B ON replace(A.name, '.', '') LIKE 
      replace(B.name, '.', ''); 
+0

Genau das brauchte ich. Ich hätte nie gedacht, "ersetzen" zu verwenden. Danke! Ich änderte auch "INSERT INTO ..." zu "INSERT OR IGRNORE INTO ..." und setzte beide Namensfelder auf NOT NULL, so ignoriert es alle Datensätze, in denen kein übereinstimmender/ähnlicher Name in beiden Tabellen vorhanden ist. – taylorbuckeye

Verwandte Themen