我正在尝试比较数据库中两个表的记录。一个表(客户)包含近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语句出了什么问题?
答案 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
是唯一的。