Levenshtein 可能会很慢,但可能
对每个要检查的值进行一次查询,得到 MIN lenvenshtein 距离。执行 2 个查询的 UNION ALL,并将其用作子查询来选择人员和最小距离的总和,并按该值降序排列。
编辑
假设您可以重新设计表格
有 3 张桌子:-
专业人士
ID 姓名表...
资格表
Id QualificationName
LinkTable
ProfessionalId QualificationId
然后做一个查询,为资格的 levenshtein 距离做一个子选择(这应该意味着只做每个资格,而不是每个人的资格): -
SELECT Name, SUM(Relevancy) AS SumRelevancy
FROM
(
SELECT a.Name, MIN(c.Relevancy) AS Relevancy
FROM Professionals a
INNER JOIN LinkTable b ON a.Id = b.ProfessionalId
INNER JOIN
(
SELECT QualificationId, LEVENSHTEIN('CA', QualificationName) AS Relevancy FROM Qualifications
) c ON b.QualificationId = c.QualificationId
GROUP BY a.Name
UNION ALL
SELECT a.Name, MIN(c.Relevancy) AS Relevancy
FROM Professionals a
INNER JOIN LinkTable b ON a.Id = b.ProfessionalId
INNER JOIN
(
SELECT QualificationId, LEVENSHTEIN('BA', QualificationName) AS Relevancy FROM Qualifications
) c ON b.QualificationId = c.QualificationId
GROUP BY a.Name
) Sub1
GROUP BY Name
ORDER BY SumRelevancy