2017-04-19 84 views
0

我試圖比較兩個不同表中的一列中的數據。這兩個表是多了很多列,但爲了簡單起見.....SQLITE比較兩個表中的列以查找LIKE數據

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'); 

大部分我所發現的迄今已發現表之間的差異,但我還沒有設法找到如何匹配類似的數據。我在尋找的東西會產生這樣的結果:

表A         |   表B

約翰·史密斯    |   John Smith

Jane Smith       |   jane smith

J Doe       |   J. Doe的

下面的代碼匹配了幾個名字:

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; 

不過,我還沒有想出如何讓包含標點符號的名字。這不起作用:

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

定義「相似」。 –

+0

類似的,我的意思是如果表A在名稱字段中有「John Smith」,我希望它匹配到能夠B名稱字段包含「JOHN SMITH」,JOHN_SMITH「,」JohnSmith「等的地方。 – taylorbuckeye

+0

列舉了一些例子,但沒有任何可以指定算法的例子 –

回答

0

要忽略某些字符,請在執行比較之前使用replace()刪除它們。要忽略大小寫,請使用LIKE或COLLATE NOCASE:

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

這正是我所需要的,我從未想過要使用「替換」,謝謝!我還將「INSERT INTO ...」更改爲「INSERT OR IGRNORE INTO ...」,並將兩個名稱字段都設置爲NOT NULL,因此它會忽略兩個表中沒有匹配/相似名稱的記錄。 – taylorbuckeye