【发布时间】:2018-11-13 08:00:24
【问题描述】:
我有以下两张表:
表 1:
CREATE TABLE tbl_str_match_1
(
enumber int,
ename varchar(100),
eaddress varchar(500)
);
INSERT INTO tbl_str_match_1 VALUES(1,'John Mak','Hno 12 Street Road, USA');
INSERT INTO tbl_str_match_1 VALUES(2,'Shai Lee','UK');
INSERT INTO tbl_str_match_1 VALUES(3,'Smith Watson','Street X01 UAE');
INSERT INTO tbl_str_match_1 VALUES(4,'Ray Gibbs','SA 124');
表2:
CREATE TABLE tbl_str_match_4
(
name varchar(100),
[address] varchar(500)
);
INSERT INTO tbl_str_match_4 VALUES('Mak John','Street Road, Hno 12, USA');
INSERT INTO tbl_str_match_4 VALUES('Shai A Lee','UK');
INSERT INTO tbl_str_match_4 VALUES('A watson Smeeth ','UAE Street X01');
INSERT INTO tbl_str_match_1 VALUES('Henry Jay','RUS OP124');
我想使用传递的数字从表 tbl_str_match_1 中搜索名称,然后使用名称作为输入进行下一次搜索,然后从另一个名为 tbl_str_match_4 的表中找到名称和地址。
注意:
姓名可以按任何顺序排列,例如第一个中间名或中间名或姓氏中间名,任何概率都是可能的。
我想从第二个表中找到名称和地址,并增加一列,即字符串的百分比匹配。
将进行两次搜索,第一次在表
tbl_str_match_1上获取姓名,第二次在表tbl_str_match_4上获取姓名和地址。对于第一条记录
John Mak,它应该显示与Mak John100% 匹配。对于第二条记录,
Shai Lee应该显示 90% 与Shai A Lee匹配,因为出现了A中间名。最后一条记录
Ray Gibbs不会显示在结果集中,因为它与其他表值不匹配。
--查询:
WITH CTE1 AS
(
SELECT ename FROM tbl_str_match_1 WHERE enumber = 1
)
SELECT name,[address] FROM tbl_str_match_4 WHERE name LIKE '%'+(SELECT ename from CTE1)+'%'
预期结果:
场景1:如果我通过enumber = 1,那么结果应该是:
Name Address Matching Percentage
------------------------------------------------------------
Mak John Street Road, Hno 12, USA 100
场景2:如果我通过enumber = 2,那么结果应该是:
Name Address Matching Percentage
------------------------------------------------------------
Shai A Lee UK 90
场景 3:如果我通过 enumber = 3 那么结果应该是:
Name Address Matching Percentage
------------------------------------------------------------
A watson Smeeth UAE Street X01 70
场景 4:如果我通过 enumber = 4 那么结果应该是:
没有结果,因为我们没有任何相关匹配。
Name Address Matching Percentage
------------------------------------------------------------
【问题讨论】:
-
levenshtein 距离???
-
很高兴您正确发布了示例数据,但您也应该发布预期结果。
-
@ZoharPeled,添加了预期结果。
标签: sql-server sql-server-2008-r2