有没有一种方法可以在忽略给定字符串的同时找到重复的数据?
例如,如果我有一个名称表,是否有一种方法可以连接两个都有名称“ann smith”但忽略字符串“dr.”的行。例如,包含“ann smith”和“dr.ann smith”的行应该连接成一行,该行的名称为“dr.ann smith”。如果姓名匹配(减去“dr.”字符串)并且两行的地址匹配,请连接电话号码。我想取两个名字中较大的一个,我想这会涉及到使用max语句。
目前我有一个名为t的表:
name | phone | address
ann smith | 1234567899 | 123 home address
dr. ann smith | 1234567890 | 123 home address
brian smith | 1235551234 | 789 city street
我想去:
name | phone | address
dr. ann smith | 1234567890, 1234567899 | 123 home address
brian smith | 1235551234 | 789 city street
3条答案
按热度按时间8nuwlpux1#
要做您想做的事情,您可能需要cte(公共表表达式),以及
LATERAL
查询。不幸的是,MySQL5.x没有实现这两个功能。以下查询将查找重复的名称:
这是朝着正确方向迈出的一步,但您需要进一步处理才能得到所需的结果。
如果你升级到mysql 8,你会得到cte,但仍然不会得到横向查询。
编辑:我更进一步,以确定重复的名字。如果没有ctes,这个问题看起来越来越难看:
t9aqgxwy2#
最后我综合使用了以上的答案。首先,我创建了一个临时表,用空字符串修剪并替换“dr.”字符串。
然后我使用select和groupby将该表中的值与相同的纯名称值连接起来。
这将给出一个包含所需结果的表格:
kcwpcxri3#
假设这些是完全嵌套的,您可以通过执行以下操作获得“long form”:
然后可以在聚合中使用它。我将使用子查询: