【问题标题】:SQLITE compare columns in two tables to find LIKE dataSQLITE 比较两个表中的列以查找 LIKE 数据
【发布时间】:2017-04-19 22:47:47
【问题描述】:

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

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

【问题讨论】:

  • 定义“相似”。
  • 类似我的意思是,如果表 A 在名称字段中有“John Smith”,我希望它能够匹配名称字段包含“JOHN SMITH”,JOHN_SMITH”,“JohnSmith”的 B "等。
  • 您列出了一些示例,但没有任何可以指定算法的示例。
  • 我又看了一遍数据,发现实际上变量并没有我之前想象的那么多。我将编辑我的原始问题以反映这一变化。

标签: linux sqlite compare


【解决方案1】:

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

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

【讨论】:

  • 这正是我所需要的。我从没想过要使用“替换”。谢谢!我还将“INSERT INTO ...”更改为“INSERT OR IGRNORE INTO ...”并将两个名称字段都设置为NOT NULL,因此它会忽略两个表中没有匹配/相似名称的任何记录。
猜你喜欢
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
  • 2016-05-11
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
相关资源
最近更新 更多