我有一个sql表Company1,其中包含字段companyname,personname,mobile,cardno(从excel文件导入)和另一个表Company2,其中包含更多字段,包括与上面相同的字段(从表单中添加)。
我想检查一个特定公司,每个表中可能缺少行数以及有多少不匹配。与company1中不存在的任何行一样,如果存在,则为特定行的人名,mobileno和cardno匹配。
例如。 如果公司1有行
Peter,9412686,10239897
和Company2有
Peter,9000000, 10239897
手机号码不匹配我想显示有不匹配的行进行校正。是否可以使用sql查询。
答案 0 :(得分:0)
您可以尝试使用所有4个(或更多)列匹配的连接条件,从LEFT JOIN
到Company2
执行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