我正在尝试比较数据库中两个表的记录。一个表(客户)包含近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
是唯一的。