嗨我有一个查询到X表的结果集
1 | JOHN
2 | JOHN D
3 | JOHN D.
4 | JOHN DO
5 | JOHN DOE
6 | JOHN DD
7 | JOHN DOE.
8 | JOHNY
我需要将这个结果集缩小到这个巧合中只有一个结果,我需要将最合适的记录作为有效结果。所以我认为对此的正确算法是这样的:
答案 0 :(得分:1)
嗯,这在计算上很昂贵。我将采用的方法是在字段上自我连接,以查看每个字段与其他字段的重叠:
select x.name, count(*)
from x cross join
x x2
where left(x.name, length(x.name)) = left(x2.name, length(x.name))
group by x.name
order by count(*) desc
我注意到你的“John”而不是“8”的数量为7。我怀疑你不想匹配“Johny”。为此,我们添加一个附加条款:
select x.name, count(*)
from x cross join
x x2
where left(x.name, length(x.name)) = left(x2.name, length(x.name)) and
(length(x.name = x2.name) or substr(x2.name, length(x.name)+1, 1) = ' ')
group by x.name
order by count(*) desc
为此,它假定您在数据中拥有“最短”版本。因此,如果“John”不是数据行,它将不会查找“John”。
答案 1 :(得分:0)
怎么样?
SELECT Name
FROM tableName
GROUP BY Name
HAVING COUNT(*) > 1