比较2个sql表以查找不匹配的数据

时间:2017-05-15 05:22:26

标签: sql-server excel

我有一个sql表Company1,其中包含字段companyname,personname,mobile,cardno(从excel文件导入)和另一个表Company2,其中包含更多字段,包括与上面相同的字段(从表单中添加)。

我想检查一个特定公司,每个表中可能缺少行数以及有多少不匹配。与company1中不存在的任何行一样,如果存在,则为特定行的人名,mobileno和cardno匹配。

例如。 如果公司1有行

Peter,9412686,10239897

和Company2有

Peter,9000000, 10239897

手机号码不匹配我想显示有不匹配的行进行校正。是否可以使用sql查询。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用所有4个(或更多)列匹配的连接条件,从LEFT JOINCompany2执行Company1。然后,如果Company2中的记录与Company1中的记录不完全匹配,则会出现不匹配。

SELECT c2.*
FROM Company2 c2
LEFT JOIN Company1 c1
    ON c2.companyname = c1.companyname AND
       c2.personname  = c1.personname  AND
       c2.mobile      = c1.mobile      AND
       c2.cardno      = c1.cardno
WHERE c1.companyname IS NULL

这假设Company2是关于为给定公司工作的员工的条目的主表。如果员工记录可以存在于一个表中,而不是两个表中,那么您应该考虑使用完全外部联接。

答案 1 :(得分:0)

这对你有用吗?在当前版本的查询中,移动不匹配会覆盖cardno不匹配,但添加它也不难。

SELECT
    ISNULL(C1.personname,C2.personname) personname,
CASE 
    WHEN C1.personname IS NULL THEN 'Missing in Company 1 table' 
    WHEN C2.personname IS NULL THEN 'Missing in Company 2 table' 
    WHEN (C1.mobile <> C2.mobile) THEN 'Mobile mismatch'
    WHEN (C1.cardno <> C2.cardno) THEN 'Cardno mismatch'
    ELSE NULL
END AS 'Comment' 
FROM 
Company1 C1
FULL OUTER JOIN
Company2 C2 ON C1.personname = C2.personname