SQLITE比较两个表中的列以查找LIKE数据

时间:2017-04-19 22:47:48

标签: linux sqlite compare

我正在尝试比较两个不同表中的一列中的数据。这两个表是更多的列,但为了简单起见......

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

约翰史密斯|约翰史密斯

<简>史密斯|简·史密斯

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.%";

1 个答案:

答案 0 :(得分:0)

要忽略某些字符,请在进行比较之前使用replace()删除它们。要忽略大小写,请使用LIKE或COLLATE NOCASE:

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