2017-04-19 28 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