我正在尝试在两个不同表中的一列中比较数据。这两个表有更多的列,但为简单起见.....
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   | 约翰·史密斯
简·史密斯   | 简·史密斯
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.%";
要忽略某些字符,请在进行比较之前用repent((将其删除。忽略案例,使用或整理Nocase:
SELECT A.name,
B.name
FROM A
JOIN B ON replace(A.name, '.', '') LIKE
replace(B.name, '.', '');