【发布时间】: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 "等。
-
您列出了一些示例,但没有任何可以指定算法的示例。
-
我又看了一遍数据,发现实际上变量并没有我之前想象的那么多。我将编辑我的原始问题以反映这一变化。