Sql server 比较两个sql表中不匹配的数据
我有一个sql表格Company1,其中包含companyname、personname、mobile、cardno字段(从excel文件导入),还有一个表格Company2,其中包含更多字段,包括与上述字段相同的字段(从表单中添加) 我想检查一个特定的公司,每个表中有多少行缺失,有多少不匹配。与company2中不在company1中的任何行一样,如果存在personname、mobileno和cardno,则为特定行的匹配行 例如。 如果公司1有rowSql server 比较两个sql表中不匹配的数据,sql-server,excel,Sql Server,Excel,我有一个sql表格Company1,其中包含companyname、personname、mobile、cardno字段(从excel文件导入),还有一个表格Company2,其中包含更多字段,包括与上述字段相同的字段(从表单中添加) 我想检查一个特定的公司,每个表中有多少行缺失,有多少不匹配。与company2中不在company1中的任何行一样,如果存在personname、mobileno和cardno,则为特定行的匹配行 例如。 如果公司1有row Peter,9412686,10239
Peter,9412686,10239897
而公司2已经
Peter,9000000, 10239897
手机号码不匹配。我想显示不匹配的行以进行更正。sql查询是否可行。您可以尝试执行从
Company2
到Company1
的左联接,联接条件是所有4个(或更多)列都匹配。然后,当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
是关于为给定公司工作的员工条目的主表。如果一个雇员记录可以出现在一个表中,而不是两个表中,那么您应该考虑使用一个完整的外部连接来代替。 这对您有用吗?在当前版本的查询中,移动不匹配覆盖了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
选择
ISNULL(C1.personname,C2.personname)personname,
案例
当C1.personname为空时,则“在公司1表中丢失”
当C2.personname为空时,则“在公司2表中缺失”
当(C1.移动C2.移动)时,则“移动不匹配”
当(C1.cardno C2.cardno)时,则“cardno不匹配”
否则无效
以“评论”结尾
从…起
公司1 C1
完全外接
C1上的公司2 C2.personname=C2.personname
如果OP想知道行中值不匹配的列的确切列名,上述查询是否有效?@Coder1991不,不会,但OP没有明确要求。您正在考虑的可能需要动态SQL。我的答案至少是标记不匹配。是的。我只是好奇地想知道。除了动态sql,我的假设是,如果OP需要知道确切的列名,合并操作还将让OP知道不匹配的值(output.deleted)。然而,我希望这将是一个代价高昂的操作。@Coder1991我希望不匹配记录的数量很少,并且数据中的缺陷相对较少,因此可以进行手动检查。上面的查询是否显示了所有不匹配或匹配的记录。请注意,从excel导入的Company 1表是最新的,我需要对照第一个表检查Company2数据。假设company1表仅包含该公司的所有记录,则Company name列是否冗余?