mysql未在查询中选择记录

时间:2014-11-07 04:05:00

标签: 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 != '*')
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

此查询产生以下结果

xxxxx

  
    

(道歉,但由于保密,我必须传感图像,但你必须承认我的话,person_id 4510和person_id 5035拥有相同的手机号码)

  

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

enter image description here

任何人都知道这里发生了什么?

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

1 个答案:

答案 0 :(得分:1)

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

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