MySQL INNER JOIN无法在大表中返回正确的数据

时间:2018-07-14 13:20:32

标签: mysql sql

我正在尝试比较数据库中两个表的记录。一个表(客户)包含近40,000条记录,另一个表(用户)包含约1,500条记录。这是我的SQL语句:

SELECT
   Clients.Name
 , Clients.IDCardNo
 , Users.IDCardNo
FROM
  Clients INNER JOIN Users
ON
  (Clients.IDCardNo = REPLACE(Users.IDCardNo, '-', ''));

(Users数据库中的客户ID卡号具有多余的连字符,在进行比较之前,我必须将其删除,因为在Clients数据库中,没有ID卡号具有连字符。这就是为什么我在MySQL中使用REPLACE()的原因)

令我惊讶的是,MySQL返回了近180,000条记录(我在所有数据库中没有那么多记录!),其中每条记录具有相同的Clients.Name和Clients.IDCardNo!

这是MySQL中的错误,因为它无法扩展和处理大数据,或者我的SQL语句出了什么问题?

1 个答案:

答案 0 :(得分:1)

这不是数据库中的“错误”。 JOIN就是这样工作的。您的数据中有重复项,这会在JOIN中导致多个结果。

您可以通过以下查询进行检查:

select c.IDCardNo
from clients c
group by c.IDCardNo
having count(*) > 1;

和:

select REPLACE(u.IDCardNo, '-', ''))
from users u
group by REPLACE(u.IDCardNo, '-', ''))
having count(*) > 1;

如果存在“错误”,则是在数据中或您认为这些IDCardNo是唯一的。