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

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


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

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

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

最佳答案

这不是数据库中的“错误”。这是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是唯一的。

08-08 00:34