要执行您想要的操作,您可能需要CTE(公共表表达式),以及
LATERAL
查询。不幸的是,MySQL5.x没有实现其中的任何一个。
以下查询查找重复的名称:
select plain_name, count(*)
from (
select name, trim(replace(lower(name), lower('Dr.'), '')) as plain_name
from my_table
) x
group by plain_name
having count(*) > 1
这是朝着正确的方向迈出的一步,但您需要进一步处理才能得到想要的结果。
如果升级到MySQL8,您将得到CTE,但仍然不会得到横向查询。
编辑:
我进一步确认了重复的名字。如果没有CTE,这个查询看起来越来越难看:
select z.*, y.times
from (
select name, trim(replace(lower(name), lower('Dr.'), '')) as plain_name
from my_table
) z,
(
select plain_name, count(*) as times
from (
select name, trim(replace(lower(name), lower('Dr.'), '')) as plain_name
from my_table
) x
group by plain_name
having count(*) > 1
) y
where z.plain_name = y.plain_name;