Sql server 2008 r2 失踪周视图

Sql server 2008 r2 失踪周视图,sql-server-2008-r2,Sql Server 2008 R2,我有两个表,我需要比较,以找到丢失的数据 表A:定义表 Year, Week, cmp_code, [other columns] 表B:现金收入 Year, WeekNo, FranchiseID 表A列出了所有可能的ID周和年组合,我们应该有数据。表B是我们实际拥有的数据。我需要列出我们还没有的,所以B-A的增量。我如何构造查询来查找这些缺失的值 您可以使用exceptset操作符返回两个集合之间的差异: SELECT [Year], [Week], cmp_code FROM Tabl

我有两个表,我需要比较,以找到丢失的数据

表A:定义表

Year, Week, cmp_code, [other columns]
表B:现金收入

Year, WeekNo, FranchiseID

表A列出了所有可能的ID周和年组合,我们应该有数据。表B是我们实际拥有的数据。我需要列出我们还没有的,所以B-A的增量。我如何构造查询来查找这些缺失的值

您可以使用
except
set操作符返回两个集合之间的差异:

SELECT [Year], [Week], cmp_code FROM TableA
EXCEPT
SELECT [Year], [WeekNo], FranchiseID FROM TableB
这将返回TableA中与TableB中不完全匹配的行。使用相关的
不存在
查询或
左连接
可以获得相同的结果。
不存在
的性能最好。

您可以使用


为了列名称的准确性,我编辑了OP。名字是什么重要吗?这1对1匹配吗?不,名称不重要,唯一重要的是每个位置的列可以直接比较,也可以通过隐式转换进行比较。但列数必须相同。啊,好的。我最终需要的A专栏比B专栏更多。谢谢你的帮助!后来我发现我需要从TableA中包含比TableB更多的列。这个答案最终更符合我的需要,尽管两者都能起作用。
SELECT  [Year], [Week], ID 
FROM    TableA AS a
WHERE   NOT EXISTS
        (   SELECT  1
            FROM    TableB AS b
            WHERE   b.[Year] = a.[Year]
            AND     b.[Week] = a.[Week]
            AND     b.ID = a.ID
        );