比较表和查找丢失的记录

时间:2016-12-19 19:41:46

标签: sql

我正在尝试比较表格 T1 和视图 v1 ,并从表格T1中找到丢失的记录,并在点击按钮时在excel中显示结果。我正在尝试将情况包装到存储过程中并从vba代码中调用它。我不知道如何开始这个。虽然它有相同的数据,但两个表中的字段名称都不同。任何帮助都感激不尽。我尝试了很多代码示例,但是我没有实现我想要的......

表T1

alpha.FileID

主要政策编号

保险名称

查看V1

写到FileID

PolNO

InsName

这些是几列。虽然它们具有不同的字段名称,但数据是相同的。有时表 v1,中缺少记录,我需要比较两个表并找到表v2的缺失记录。

           SELECT View_v1.[Insured Name] 

            FROM   View_v1

            WHERE   View_v1.alpha.FileID NOT IN      

            (        

                   SELECT Table_t1.FileID   

                   FROM    Table_t1       

            )

2 个答案:

答案 0 :(得分:0)

except子句是最简单的方法:

SELECT FileID, PolNO, InsName
  FROM View V1
EXCEPT
SELECT FileID, MasterPolicyNumber, InsuranceName
  FROM Table T1

这将为您提供第一个选择中第二个选择中不存在的行(根据您所需的结果,您可以翻转顶部和底部选择)。只要数据类型和列数相同,每个字段的名称就不重要了。您的结果集将显示第一个选择的字段名称。

此外,由于您没有指定您的dbms," MINUS"用来代替" EXCEPT"对于某些dbms,比如Oracle。

答案 1 :(得分:0)

我相信这正是您根据自己的描述寻找的内容。

我正在比较每个字段,而不仅仅是FileID,因为您的示例似乎正在尝试。因此,如果您真的只想查找丢失的FileID,只需在条件中删除其他连接。

SELECT View_v1.FileID, View_v1.PolNO, View_v1.InsName 
FROM   View_v1
LEFT JOIN Table_t1 
    on View_v1.FileID = Table_t1.FileID 
    and View_v1.PolNO = Table_t1.[Master Policy Number] 
    and View_v1.InsName = Table_t1.[Insurance Name]
WHERE   Table_t1.FileID is null