查询中未选择mysql记录

查询中未选择mysql记录,mysql,Mysql,因此,我正在运行一些脚本来处理重复记录的问题。 我是在比赛要求有多严格的阶段这样做的 我注意到我合并的记录比我能识别的要少 我用来识别重复记录的脚本如下 SELECT p.firstname, p.surname, p.email, REPLACE(p.mobile, ' ', ''), count(*) as `duplicates` FROM person p WHERE (p.firstname!='' and p.firstname != '?' and p.firstname != '

因此,我正在运行一些脚本来处理重复记录的问题。 我是在比赛要求有多严格的阶段这样做的

我注意到我合并的记录比我能识别的要少

我用来识别重复记录的脚本如下

SELECT p.firstname, p.surname, p.email, REPLACE(p.mobile, ' ', ''), count(*) as `duplicates`
FROM person p
WHERE (p.firstname!='' and p.firstname != '?' and p.firstname != '*')
AND (p.surname!='' and p.surname != '?' and p.surname != '*' )
AND (p.email != 'xxxxx' OR p.mobile != 'xxxxx')
GROUP BY p.firstname, p.surname, p.email, p.mobile
HAVING COUNT(*) > 1;
因此,这告诉我重复记录中的名字、姓氏、姓名和电子邮件或手机号码完全匹配

然后,我遍历其中的每一条并合并记录,然后删除旧的记录

在我运行完这个之后,我注意到我仍然有一些重复的剩余,所以我尝试选择其中的一些

SELECT p.person_id, p.firstname, p.surname, p.email, REPLACE(p.mobile, ' ', '') `p.mobile`
FROM person p
WHERE p.firstname='Ross' AND p.surname='Allen' and p.email='xxxxx'
ORDER BY p.person_id
此查询产生以下结果

(抱歉,但由于保密原因,我必须感应图像,但您必须相信我的话,即person_id 4510和person_id 5035具有相同的手机号码)

现在,获取这些重复记录的实际查询从上一个查询的结果集中获取其值。现在如果我也输入手机号码。我得到0个结果。(我进行了双重检查、tripple检查和quadribble检查,确保两个记录中的电话号码实际上完全相同,因为它们是varchar字段

有人知道这是怎么回事吗

some table details:
Engine: InnoDB
Row format: Compact
Table rows: 42,538
Coalation:" utf8_general_ci

手机号码可能有前导空格或尾随空格。在识别重复项的查询中,您可以从手机号码中删除空格。您可以尝试将where子句更改为:

WHERE p.firstname = 'Ross' AND p.surname = 'Allen' AND p.email = 'xxxxx' 
      AND REPLACE(p.mobile, ' ', '') = '[MOBILENUMBER]'

是的,我现在觉得自己像个白痴。:)你的回答是正确的。非常感谢!没问题。额外的空间有时会很麻烦,也很难找到。